【发布时间】:2019-06-25 02:28:57
【问题描述】:
在此不胜感激。我有这段代码试图在表单字段收到更改时更新我的状态。这在以前版本的 React 中运行良好,但在升级到最新版本后,我收到错误“无效的传播不可迭代实例的尝试”。
我知道我需要使我的状态正常化,这是我计划的。但是,这将涉及重大的重构,我希望通过快速修复来避免目前。
错误
代码
handleMaterialTypeChange = (event, data) => {
const material = this.state.controls.materials.materials;
material[data.searchInput].material_type = data.value;
this.setState(prevState => ({
controls: {
...prevState.controls,
materials: {
...prevState.controls.materials,
materials: [
...prevState.controls.materials.materials[data.searchInput],
...material
]
}
}
}));
};
状态示例:
state = {
controls: {
materials: {
value: "",
materials: [
{
material_type: "",
material: ""
}
],
validation: {
required: true,
minLength: 10
},
valid: false,
touched: false
}
}
}
【问题讨论】:
-
你能给我们看一个你的状态结构的例子吗? (以及这个函数改变了哪个变量)
-
这个错误意味着你有
...something和something不是一个数组或类似数组的东西 -
是的。让我用状态结构更新帖子。
-
不是 100% 确定,但看起来应该是
prevState.controls.materials.materials[data.searchInput],没有... -
可能应该是
materials: [ ...material ]没有...prevState.controls.materials.materials[data.searchInput],因为你在顶部更新它
标签: javascript reactjs