fix: Table crash when dataSource contains number (#26042)

close #26039
This commit is contained in:
偏右 2020-08-05 22:29:38 +08:00 committed by GitHub
parent 35a9d94c92
commit 9a67f3571d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 4 deletions

View File

@ -162,7 +162,7 @@ function Table<RecordType extends object = any>(props: TableProps<RecordType>) {
const { childrenColumnName = 'children' } = mergedExpandable;
const expandType: ExpandType = React.useMemo<ExpandType>(() => {
if (rawData.some(item => (item as any)[childrenColumnName])) {
if (rawData.some(item => (item as any)?.[childrenColumnName])) {
return 'nest';
}
@ -183,7 +183,7 @@ function Table<RecordType extends object = any>(props: TableProps<RecordType>) {
return rowKey;
}
return (record: RecordType) => (record as any)[rowKey as string];
return (record: RecordType) => (record as any)?.[rowKey as string];
}, [rowKey]);
const [getRecordByKey] = useLazyKVMap(rawData, childrenColumnName, getRowKey);

View File

@ -160,6 +160,19 @@ describe('Table', () => {
);
});
it('should not crash when dataSource is array with none-object items', () => {
mount(
<Table
columns={[
{
title: 'name',
},
]}
dataSource={['1', 2, undefined, {}, null, true, false, 0]}
/>,
);
});
it('prevent touch event', () => {
const wrapper = mount(
<Table

View File

@ -30,7 +30,7 @@ export default function useLazyKVMap<RecordType>(
const rowKey = getRowKey(record, index);
kvMap.set(rowKey, record);
if (childrenColumnName in record) {
if (record && typeof record === 'object' && childrenColumnName in record) {
dig((record as any)[childrenColumnName] || []);
}
});

View File

@ -59,7 +59,7 @@ function flattenData<RecordType>(
(data || []).forEach(record => {
list.push(record);
if (childrenColumnName in record) {
if (record && typeof record === 'object' && childrenColumnName in record) {
list = [
...list,
...flattenData<RecordType>((record as any)[childrenColumnName], childrenColumnName),