antd 表格嵌套表格_antd中嵌套表格,子表格数据相同的问题解决(hook写法)

本文详细介绍了在Ant Design(antd)中使用表格嵌套表格时遇到的问题,即子表格数据相同。通过分析,发现原因是每次展开子表格时,数据源总是新的数组。为解决此问题,作者采用对象键值对存储每次请求到的子表格数据,通过状态管理(useState)更新数据,并在渲染子表格时根据唯一ID匹配数据,成功实现了不同子表格显示不同数据的功能。
摘要由CSDN通过智能技术生成

相信很多朋友在使用antd的嵌套表格的时候都碰到了这个问题,本人也深有体会,简直愁的不行,不过在经过和百度的一番争斗之后,终于是找到的问题的原因所在。

首先,antd的表格数据源dataSource接收的是一个数组,如果我们子表格每次接收的数组都是一个单独的新的数组,那么就会造成所有的子表格都是一样的,因为每次展开只渲染了这一个数组

那么我们就要把每次请求到的子表格数据给存起来了,这里我用的是对象键值对的方式去存储的

因为没有后台数据,所以我这边就先模拟了一些数据

const ChildrenDataOne =[

{ name:'XiaoHua1', age: 15, address: 'ZhengZhou', key: 0},

{ name:'XiaoHua2', age: 15, address: 'ZhengZhou', key: 1},

{ name:'XiaoHua3', age: 15, address: 'ZhengZhou', key: 2},

]const ChildrenDataTwo =[

{ name:'XiaoBai1', age: 15, address: 'ZhengZhou', key: 0},

{ name:'XiaoBai2', age: 15, address: 'ZhengZhou', key: 1},

{ name:'XiaoBai3', age: 15, address: 'ZhengZhou', key: 2},

]const ChildrenDataThree =[

{

Ant Design 的 Table 组件嵌套表格,需要对数据进行一些处理。以下是一个示例: ```jsx import React, { useState } from 'react'; import { Table } from 'antd'; const data = [ { key: '1', name: 'John Brown', age: 32, address: 'New York No. 1 Lake Park', children: [ { key: '11', name: 'Child Brown', age: 16, address: 'New York No. 2 Lake Park', }, ], }, { key: '2', name: 'Jim Green', age: 42, address: 'London No. 1 Lake Park', children: [ { key: '21', name: 'Child Green 1', age: 16, address: 'London No. 2 Lake Park', }, { key: '22', name: 'Child Green 2', age: 18, address: 'London No. 3 Lake Park', }, ], }, ]; const columns = [ { title: 'Name', dataIndex: 'name', key: 'name', }, { title: 'Age', dataIndex: 'age', key: 'age', }, { title: 'Address', dataIndex: 'address', key: 'address', }, ]; const expandedRowRender = (record) => { const columns = [ { title: 'Name', dataIndex: 'name', key: 'name', }, { title: 'Age', dataIndex: 'age', key: 'age', }, { title: 'Address', dataIndex: 'address', key: 'address', }, ]; const data = record.children.map((child) => ({ ...child, key: child.key })); return <Table columns={columns} dataSource={data} pagination={false} />; }; const TableWithNestedTable = () => { const [expandedRowKeys, setExpandedRowKeys] = useState([]); const handleExpand = (expanded, record) => { setExpandedRowKeys(expanded ? [record.key] : []); }; return ( <Table columns={columns} dataSource={data} expandedRowRender={expandedRowRender} onExpand={handleExpand} expandedRowKeys={expandedRowKeys} /> ); }; export default TableWithNestedTable; ``` 上面的代码,我们通过 `data` 定义了表格数据。每个数据项都有一个 `children` 属性,它是一个数组,用于嵌套表格。 在 `columns` ,我们只定义了三列,因为表格的列与父表格的列相同。 `expandedRowRender` 函数用于渲染表格。它接收一个参数 `record`,即当前行的数据项。我们可以通过 `record.children` 获取该行的表格数据,并且使用 `map` 方法将其转换为 Ant Design Table 组件所需的格式。 在 `TableWithNestedTable` 组件,我们使用 `useState` 定义了一个状态变量 `expandedRowKeys`,用于存储展开行的键值。 在 `handleExpand` 函数,我们通过 `setExpandedRowKeys` 方法将展开行的键值添加到 `expandedRowKeys` 数组。这个函数会在用户点击展开/收起按钮时触发。 最后,在 `Table` 组件,我们通过 `expandedRowRender` 属性将表格渲染函数传递给 Ant Design Table 组件,并且通过 `onExpand` 和 `expandedRowKeys` 属性控制展开行的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值