更新状态属性而不复制它并使用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
这样的图书馆。
使用浅拷贝不会引入任何错误,在最坏的情况下,某些组件将无法正常重新渲染。
你可能想读这些: