状态的浅拷贝会产生错误吗?

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.

这样的库

使用浅拷贝不会引入任何错误,最坏的情况是您的某些组件不会正确重新呈现。

您可能想阅读这些内容:

https://daveceddia.com/react-redux-immutability-guide/

https://github.com/FormidableLabs/react-fast-compare