React 的基本思想之一是状态更改应该始终且仅通过this.setState(...)
而不是手动操作状态发生。但是对于状态是一个深数组的情况,所以一个对象文字数组(实际上是一些 JSON 数据),更新该状态变得非常昂贵。如果我只想更新这样一个数组的一个元素,代码将类似于以下内容。
handleChange(index, newElement){
var newStateArray = _.cloneDeep(this.state.myArray);
newStateArray[index] = newElement;
this.setState({myArray: newStateArray });
}
我知道标准的解决方案是使用浅复制,但这只是浅数组的副本。在我的情况下不是,所以浅复制在react意义上是“错误的”,因为它会改变状态。那么究竟应该如何处理呢?我可以只使用浅拷贝并且它可以工作,但是感觉很脏并且在技术上是错误的。
编辑:或者澄清一下:如果我只使用浅拷贝并确保告诉 React 手动更新,会不会有什么不好的事情发生?
编辑:哦,这似乎已经解决了。浅拷贝并不像我想象的那样工作。我是 JS 新手,请原谅。以供参考:
var a = [{a:1}, {b:2}, {c:3}]
var b = a.slice();
b[0] = 42; // I thought this would change a, but it doesn't!