reactjs - 状态的浅拷贝会产生错误吗?
问题描述
如本文所述,更新状态属性而不复制和使用setState()
可能会导致错误。我想知道的是,如果我有一个处于如下状态的对象列表:
this.state = {
myList: [
{name: "Nestor"},
{name: "Rufus"}
]
};
如果我只是用这样的浅拷贝更新它会导致错误:
let list = [...this.state.myList];
//I modify the list here
this.setState({myList: list});
或者我必须做一个深拷贝以绝对确定不会有错误?
let list = JSON.parse(JSON.stringify(this.state.myList));
//I modify the list here
this.setState({myList: list});
谢谢您的帮助。
解决方案
这取决于您的用例。
大多数情况下,您可以使用浅拷贝。
但是,如果由于某种原因,您传递的道具(或状态)需要深入比较,那么您将不得不求助于react-fast-compare
.
使用浅拷贝不会引入任何错误,最坏的情况是您的某些组件不会正确重新渲染。
您可能想阅读以下内容:
推荐阅读
- javascript - 为什么 react native redux reducer 有时会被调用两次,有时只调用一次?
- java - 堆栈窗格问题上的 setMouseTransparent(true)
- sql - SAS PROC SQL 验证
- javascript - axios put 不发生投掷禁止
- python - 为什么我的列表在使用反向操作时被赋值为“none”?
- flutter - 如何在脚手架中将自定义偏移设置为“FloatingActionButtonLocation”?
- python - 在添加的列上获取 nan
- plot - 用 Sagemath 绘制微分方程的解
- r - R中单个图上的可变轴
- asp.net-core - .Net 核心 2.1 身份 configureapplicationcookie 会话存储与 addsession/usesessions