更新状态属性而不复制它并使用string str = "75,75,83,84";
string[] strarray = str.Split(',');
string newValue = "";
foreach (var item in strarray)
{
if (!newValue.Contains(item))
{
newValue = (newValue == "") ? item : newValue + ", " + item;
}
}
可能导致错误,如this article所述。我想知道的是,如果我有这样的状态的对象列表:
setState()
如果我仅用像这样的浅表副本进行更新,就会引起错误:
this.state = {
myList: [
{name: "Nestor"},
{name: "Rufus"}
]
};
还是我必须做一个深层复制才能绝对确定不会有错误?
let list = [...this.state.myList];
//I modify the list here
this.setState({myList: list});
谢谢您的帮助。
答案 0 :(得分:1)
这取决于您的用例。
大多数时候,您可以摆脱浅表副本。
但是如果由于某种原因,您传递的道具(或状态)需要进行深度比较,那么您将不得不求助于react-fast-compare
之类的库。
使用浅表复制不会引入任何错误,最糟糕的是,某些组件将无法正确重新呈现。
您可能想阅读以下内容: