【发布时间】:2018-02-13 21:11:21
【问题描述】:
我很难追踪与此错误相关的问题,显然这意味着我正在尝试更新不可变对象。奇怪的是,我之前使用过这个实现没有任何障碍,这就是为什么我发现这种行为如此令人困惑。
下面是我使用的方法,它只是改变数组的对象,改变属性并返回更新的状态。正如 here 所引用的,使用 prevState 似乎是绕过不变性的最佳方式。
onCheck = (id) => {
this.setState((prevState) => {
prevState.options[id].checked = !prevState.options[id].checked;
return {
options: prevState.options,
dataSource: prevState.cloneWithRows(prevState.options)
};
});
}
我还尝试了许多复制 prevState 的变体,但它仍然给我同样的不变性错误。它看起来好像仍然引用而不是复制prevState。
onCheck = (id) => {
this.setState((prevState) => {
let options = [...prevState.options];
options[id].checked = !options[id].checked;
return {
options: options,
dataSource: this.state.cloneWithRows(options)
};
});
}
【问题讨论】:
-
你正在改变你的函数中的
prevState。你不能。您需要克隆prevState.options,更改那个,然后将其设置为新的options。 -
这是完全可以接受的,因为我之前使用过那个实现,更何况它是在文档中直接引用的?除非你可以证明?
-
如何在文档中引用它?该文档显示了如何将函数传递给
setState,它允许您访问prevState,但在哪个示例中它会改变它? -
第一个 sn-p 使用
concat来操纵 prevState? -
不,它没有;
concat返回一个新数组。
标签: javascript reactjs react-native immutability