2 回答

TA贡献2019条经验 获得超9个赞
如果this.state.type.type2.parameter是一个数组,那么你为什么要引用它的属性:
let newParam = {
value: this.state.type.type2.parameter.value,
classtype: this.state.type.type2.parameter.classtype
};
我不认为您的状态是按照您期望的方式构建的,似乎您在代码中的某个时刻用对象替换了该数组。我建议使用react-devtools来帮助您跟踪状态变化。
这不完全是一个答案,但我强烈建议使用immerjs来执行这些纯嵌套更新。我几乎从不建议添加第三方库作为解决方案,但 immer 是轻量级的,并且可以改变生活。它导出一个名为 generate 的函数,并使用一个名为Proxy的概念来执行编写为突变的纯更新。
使用 immer(并修复了您的错误),您的代码将变为:
const newParam = {
value: this.state.type.type2.parameter.value,
classtype: this.state.type.type2.parameter.classtype
};
this.setState(produce(draftState => {
draftState.type.type2.parameter.push(newParam);
}))
它可以让你编写更简洁的代码,更容易阅读。是的,我知道这看起来像是一种突变,但它不是 100% 纯的。

TA贡献1804条经验 获得超8个赞
试试这个 :
this.setState(prevState => {
return {
...prevState,
type: {
...prevState.type,
type2: {
...prevState.type.type2,
parameter: [...prevState.type.type2.parameter, newParam]
}
}
}
)
添加回答
举报