状态的浅拷贝会产生错误吗?
Does shallow copy of the state create errors?
更新状态 属性 而不复制它并使用 setState()
会导致 this article 所述的错误。我想知道的是,如果我有一个像这样的状态的对象列表:
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
.
这样的库
使用浅拷贝不会引入任何错误,最坏的情况是您的某些组件不会正确重新呈现。
您可能想阅读这些内容:
更新状态 属性 而不复制它并使用 setState()
会导致 this article 所述的错误。我想知道的是,如果我有一个像这样的状态的对象列表:
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
.
使用浅拷贝不会引入任何错误,最坏的情况是您的某些组件不会正确重新呈现。
您可能想阅读这些内容: