--- order: 3 title: 嵌入列表示例 3 --- 适用表格中有嵌套的子表格时。 1.将 dataSource 中的 subTable 字段设置为 true,告诉组件渲染嵌套表格 2.本例子将演示通过异步的方式获取嵌套的表格数据。 ````jsx import { Table } from 'antd'; const data = [ { key: 1, id: 11, name: '吴彦祖', age: 42, address: '西湖区湖底公园1号', description: '我是吴彦祖,今年42岁,住在西湖区湖底公园1号。', subTable: true }, { key: 2, id: 22, name: '胡彦斌', age: 32, address: '西湖区湖底公园2号', description: '我是胡彦斌,今年32岁,住在西湖区湖底公园2号。' }, { key: 3, id: 33, name: '李大嘴', age: 32, address: '西湖区湖底公园3号', description: '我是李大嘴,今年32岁,住在西湖区湖底公园3号。' } ]; class NestedTable extends React.Component { constructor(props) { super(props); // 缓存嵌套表格的数据 this.state = { recordSubTableDataMap: {}, }; // 在 constructor 中绑定 `this` 到 handler 上,确保 `this` 的指向。 ['handleExpandedRowRender'].forEach((method) => { this[method] = this[method].bind(this); }); // columns 在 constructor 中初始化,保证 `column.render` 可以访问 `this`,同时不会重复生成。 this.columns = [ { title: '姓名', dataIndex: 'name', key: 'name' }, { title: '年龄', dataIndex: 'age', key: 'age' }, { title: '住址', dataIndex: 'address', key: 'address' }, { title: '操作', dataIndex: '', key: 'x', render: () => 删除 } ]; // 嵌套子表格的 columns this.subTableColumns = [ { title: '姓名', dataIndex: 'name', key: 'name' }, { title: '年龄', dataIndex: 'age', key: 'age' }, { title: '性别', dataIndex: 'sex', key: 'sex' }, { title: '爱好', dataIndex: 'hobby', key: 'hobby' }, { title: '住址', dataIndex: 'address', key: 'address' } ]; } handleExpandedRowRender(record) { if (record.subTable) { const recordSubTableData = this.state.recordSubTableDataMap[record.id]; if (recordSubTableData) { return (
加载中...
); } return ({record.description}
); } getSelectedRecordSubTableData(record) { const recordId = record.id; // 模拟嵌套子表格的 dataSource const mockSubTableDataSource = [ { key: 11, name: '小吴', age: 21, sex: '男', hobby: '女', address: '我是小吴,今年21岁,住在东极岛。' }, { key: 44, name: '小彦', age: 25, sex: '男', hobby: '女', address: '我是小彦,今年25岁,住在南极岛。' }, { key: 33, name: '小祖', age: 28, sex: '男', hobby: '女', address: '我是小祖,今年28岁,住在北极岛。' } ]; setTimeout(() => { this.setState({ recordSubTableDataMap: { ...this.state.recordSubTableDataMap, [recordId]: { dataSource: mockSubTableDataSource } } }); }, 1000); } render() { const props = this.props; return (