antd的Table,因重复数据导致,切换页面时仍显示了上一页的某些数据

出现如标题所述bug,有两个原因

  1. Table组件设置的rowKey不唯一
  2. render函数执行时,虚拟dom的渲染机制

第一个原因,是因为rowKey设置的是每一列数据的id,而后台返回的数据有重复的,导致rowKey不唯一了
第二个原因,是因为render函数执行时,新旧两个虚拟dom树会进行对比,两棵dom树进行节点替换的依据就是key值,如果key值相同,说明是同一个元素,那么新的元素就会替换掉旧的元素。

所以,因为第一个原因导致key出现了重复,那么react虚拟dom去渲染的时候,替换掉其中一条数据之后,会以为其余重复的数据也替换掉了,从而导致,table表单切换页面的时候,出现额外展示上一页重复数据的情况

antd是一个流行的React组件库,提供了多种UI组件,其中包括Table表格组件。使用antd Table组件,可以通过其提供的selectedRows属性来控制表格中被选中的行。如果你在使用分页功能希望翻页后还能保持之前选中的行不变,可以通过一些方法来实现这一需求。 要在翻页保持selectedRows数据,你可以采用以下几种策略: 1. 将selectedRows存储在父组件的状态中,确保在翻页不会因为组件的重渲染而丢失这些数据。你可以在父组件中维护一个状态来记录当前选中的行。 2. 使用Table组件的onRowSelect回调函数,在用户选择或取消选择某行,更新父组件的状态。确保在分页动作发生,将当前的selectedRows数据传递给分页组件。 3. 在翻页,将当前的selectedRows数据通过分页组件的某个参数传递给它,然后在分页动作完成后,重新从分页组件获取这些数据,并更新到Table组件的selectedRows属性中。 下面是一个简单的示例代码片段,说明了如何实现上述逻辑: ```jsx import React, { useState } from 'react'; import { Table } from 'antd'; const MyComponent = () => { const [selectedRows, setSelectedRows] = useState([]); const [currentPage, setCurrentPage] = useState(1); const handleRowSelect = (selectedRowKeys, selectedRows) => { setSelectedRows(selectedRows); }; const handlePageChange = (page) => { setCurrentPage(page); // 在这里,你可能需要将 selectedRows 传递给分页组件或者进行其他逻辑处理 }; const pagination = { current: currentPage, onChange: handlePageChange, }; return ( <Table rowSelection={{ selectedRowKeys: selectedRows.map(row => row.key), onSelect: handleRowSelect, }} pagination={pagination} // 其他配置项... /> ); }; ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值