Browse Source

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

close #26039
pull/26050/head
偏右 4 years ago
committed by GitHub
parent
commit
9a67f3571d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      components/table/Table.tsx
  2. 13
      components/table/__tests__/Table.test.js
  3. 2
      components/table/hooks/useLazyKVMap.ts
  4. 2
      components/table/hooks/useSelection.tsx

4
components/table/Table.tsx

@ -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);

13
components/table/__tests__/Table.test.js

@ -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

2
components/table/hooks/useLazyKVMap.ts

@ -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] || []);
}
});

2
components/table/hooks/useSelection.tsx

@ -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),

Loading…
Cancel
Save