状态的浅层副本是否会产生错误?

问题描述 投票:0回答:1

更新状态属性而不复制它并使用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});

谢谢您的帮助。

reactjs deep-copy shallow-copy
1个回答
1
投票

这取决于您的使用案例。

大多数情况下,您可以使用浅色副本。

但是如果由于某种原因,你传递的道具(或状态)需要深入比较,那么你将不得不诉诸像react-fast-compare这样的图书馆。

使用浅拷贝不会引入任何错误,在最坏的情况下,某些组件将无法正常重新渲染。

你可能想读这些:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.