首页 > 解决方案 > 状态的浅拷贝会产生错误吗?

问题描述

如本文所述,更新状态属性而不复制和使用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});

谢谢您的帮助。

标签: reactjsdeep-copyshallow-copy

解决方案


这取决于您的用例。

大多数情况下,您可以使用浅拷贝。

但是,如果由于某种原因,您传递的道具(或状态)需要深入比较,那么您将不得不求助于react-fast-compare.

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

您可能想阅读以下内容:

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

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


推荐阅读