0
点赞
收藏
分享

微信扫一扫

Ant Design rowKey导致的诡异重复、无效数据问题


问题

本文记录在使用React Ant Design的table组件时,遇到的两个表象相同,但是根源不太相同的问题。

问题1

简单的列表页,输入主键ID搜索,却展示出来两条数据。通过查看接口,明明只返回一条数据。怎么会展示两条数据呢?

Ant Design rowKey导致的诡异重复、无效数据问题_搜索


并且下面这一条数据,无法操作。这也正说明,后端返回的数据里面是不包含这一条。

Ant Design rowKey导致的诡异重复、无效数据问题_搜索_02


此时如果指定主键输入1281搜索,发现上面列表页的问题稳定复现:

Ant Design rowKey导致的诡异重复、无效数据问题_搜索_03


问题定位为前端,前端使用React Ant Design。鉴于自己是个半吊子前端开发。请教其他比较资深的前端同事,让检查一下rowKey

<section className={styles.listForm}>
<ViTable
className={styles.datasetTable}
rowKey={(record: DatasetItem) => record.datasetId + (record.cronExpStatus ?? 'n')}
columns={columns}
dataSource={datasetState.list}
loading={listLoading}
pagination={{
position: ['bottomCenter'],
total: datasetState.pagination?.total,
showSizeChanger:true,
showQuickJumper:true,
showTotal:(total: any) => (`共 ${total} 条`),
}}
onChange={handleTableChange}
/>
</section>

看出些端倪,rowKey就应该是后端返回数据里面,表示主键ID那一个字段。改成如下:​​rowKey={(record: DatasetItem) => record.datasetId}​​,问题得到修复。

问题是前人究竟是在什么样的状态下才能写出这坨屎一样的代码的?

问题2

半个月后,另一个列表页再次出现类似问题:

Ant Design rowKey导致的诡异重复、无效数据问题_主键_04


相同问题,右侧的操作按钮点击没有反应。代码也是使用正确的rowKey:

rowKey={(record: any) => record.id}

再次请教资深前端开发。尝试如下解决方案:

rowKey={(record: any, index: number) => `${record.id}${index}`}

问题解决。

结论

  1. 维护他人随手乱写随手提交的代码,真痛苦。这种无意之中的脏代码,让后来的维护者,不知道要浪费多少时间去排查问题。
  2. 不吝请教。


举报

相关推荐

0 条评论