2 回答

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果this.state.type.type2.parameter是一個(gè)數(shù)組,那么你為什么要引用它的屬性:
let newParam = {
value: this.state.type.type2.parameter.value,
classtype: this.state.type.type2.parameter.classtype
};
我不認(rèn)為您的狀態(tài)是按照您期望的方式構(gòu)建的,似乎您在代碼中的某個(gè)時(shí)刻用對象替換了該數(shù)組。我建議使用react-devtools來幫助您跟蹤狀態(tài)變化。
這不完全是一個(gè)答案,但我強(qiáng)烈建議使用immerjs來執(zhí)行這些純嵌套更新。我?guī)缀鯊牟唤ㄗh添加第三方庫作為解決方案,但 immer 是輕量級的,并且可以改變生活。它導(dǎo)出一個(gè)名為 generate 的函數(shù),并使用一個(gè)名為Proxy的概念來執(zhí)行編寫為突變的純更新。
使用 immer(并修復(fù)了您的錯(cuò)誤),您的代碼將變?yōu)椋?/p>
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貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
試試這個(gè) :
this.setState(prevState => {
return {
...prevState,
type: {
...prevState.type,
type2: {
...prevState.type.type2,
parameter: [...prevState.type.type2.parameter, newParam]
}
}
}
)
添加回答
舉報(bào)