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

博客指出React Table组件出现bug,有两个原因。一是Table组件设置的rowKey不唯一,因后台返回数据id重复所致;二是render函数执行时,虚拟dom渲染机制中,新旧dom树对比依据key值替换节点,key重复会使虚拟dom误判,导致table表单切换页面展示上一页重复数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

您可以使用 antd vueTable 组件的 pageSize 属性来设置每一页显示数据条数。以下是一个示例代码: ```html <template> <div> <a-button @click="changePageSize(10)">10 条/页</a-button> <a-button @click="changePageSize(20)">20 条/页</a-button> <a-button @click="changePageSize(50)">50 条/页</a-button> <a-table :columns="columns" :data-source="dataSource" :pagination="pagination" /> </div> </template> <script> import { Table, Button } from 'ant-design-vue'; export default { components: { 'a-table': Table, 'a-button': Button, }, data() { return { columns: [ { title: '姓名', dataIndex: 'name', key: 'name' }, { title: '年龄', dataIndex: 'age', key: 'age' }, { title: '地址', dataIndex: 'address', key: 'address' }, ], dataSource: [ { name: '张三', age: 18, address: '北京市海淀区' }, { name: '李四', age: 20, address: '上海市浦东新区' }, { name: '王五', age: 22, address: '广州市天河区' }, ], pagination: { showSizeChanger: false, // 禁用 pageSize 切换器 defaultPageSize: 10, // 默认每页显示 10 条数据 }, }; }, methods: { changePageSize(pageSize) { this.pagination.defaultPageSize = pageSize; }, }, }; </script> ``` 在上面的代码中,我们定义了一个 Table 组件,并通过 dataSource 属性传递了一个包含三条数据的数组。通过设置 pagination 属性的 showSizeChanger 为 false,禁用了 pageSize 切换器。同,设置了 defaultPageSize 属性为 10,表示默认每页显示 10 条数据。在页面上,我们定义了三个按钮,分别对应每页显示 10、20、50 条数据。在点击按钮,调用 changePageSize 方法,修改 pagination.defaultPageSize,从而实现每页显示数据条数的切换
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值