项目从react15升级到**react16**后遇到一个不刷新的问题,我知道16对于props的校验更为严格了,如果引用不变是不会触发控件刷新的。
但是我们的项目自己做了数据的双向绑定,所以很希望我们在使用**antd**的**Table**时,**datasource**的引用不要变,变了会很麻烦。
所以想请问各位大佬,有没有办法,在datasource的引用不变的情况下(也不希望一直刷新key),仍然能让antd的table重新渲染。
需求场景就是像表格内添加、删除数据这种。谢谢!
react16在不更新引用的情况下怎么刷新控件
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- lshen01 2023-03-16 21:09关注
参考GPT和自己的思路:
对于这种情况,可以使用以下方法来强制刷新antd的Table:
- 调用Table组件的forceUpdate方法,让组件重新渲染。代码如下:
<Table dataSource={dataSource} columns={columns} ref={(table) => { this.table = table; }} /> ... this.table.forceUpdate();
- 在Table的dataSource数据发生改变时,手动修改这个数据的一个属性,使得这个属性的值改变,从而强制触发组件的重新渲染。代码如下:
constructor(props) { super(props); this.state = { dataSource, dataVersion: 0, }; } ... handleAddData = () => { // 添加数据的方法 const { dataSource, dataVersion } = this.state; const newData = getNewData(); // 获取新数据 this.setState({ dataSource: [...dataSource, newData], dataVersion: dataVersion + 1, // 强制刷新组件 }); }; ... <Table dataSource={dataSource} columns={columns} key={dataVersion} />
以上两种方法可以让您在datasource不变的情况下,仍然能让antd的table重新渲染,适用于表格内添加、删除数据等需求场景。
解决 无用评论 打赏 举报
悬赏问题
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!