gpt4 book ai didi

javascript - 错误 : Attempting to set key on an object that is immutable and has been frozen

转载 作者:行者123 更新时间:2023-11-29 19:02:15 26 4
gpt4 key购买 nike

我很难找到与此错误相关的问题,显然这意味着我正在尝试更新不可变对象(immutable对象)。奇怪的是,我之前使用过这个实现没有任何障碍,这就是为什么我发现这种行为如此令人困惑。

下面是我正在使用的方法,它只是改变数组的对象,改变属性并返回更新后的状态。作为引用 here ,使用 prevState 似乎是绕过不变性的最佳方式。

Immutable Error

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)
};
});
}

最佳答案

我最终找到了解决方案,看来我不仅需要复制数组,还需要复制数组的每个元素。由于数组的各个元素/对象仍然不可变/卡住。

onCheck = (id) => {
this.setState((prevState) => {
const newOptions = prevState.options.map((option, index) => {
let copyOption = {...option};
if (id == index) {
copyOption.checked = !copyOption.checked;
}
return copyOption;
});
return {
options: newOptions,
dataSource: this.state.dataSource.cloneWithRows(newOptions)
};
});
}

关于javascript - 错误 : Attempting to set key on an object that is immutable and has been frozen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46057230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com