我正在嘗試使用具有動態鍵的物件更新嵌套狀態陣列,但有些內容略有偏差,希望有人能夠幫助指導我朝著正確的方向前進:
state array:
[
0: { createdTime: 'XXX',
id: 'XXX',
fields: {
k1: v1,
k2: v2,
k3: v3,
}
]
我有一個功能組件回傳一個物件,如:
e = { k2: v4 }
以下代碼很接近但有點偏離:
onInfoEditSubmit = (props, e, n) => {
if (Object.keys(e).length > 0) {
let dl = new DataLayer()
dl.updateStartupRecord(props.current_startup_or_engagement.id, e)
this.setState(prevState => ({
startup_records: prevState.startup_records.map(
r => r.id === props.current_startup_or_engagement.id ?
{ ...r,
fields: {
...r.fields,
e
}
}: r
)
}))
}
}
此代碼后的新狀態陣列:
state array:
[
0: { createdTime: 'XXX',
id: 'XXX',
fields: {
k1: v1,
k2: v2,
k3: v3,
e: {k2: v4}
}
]
我正在關注這篇文章:在 React 中使用 setState 更新物件
在這個例子中,我只更新了一個屬性,但希望它適用于多個新值,因此輸入物件可能如下所示:
e = {k2: v4, k3: v5}
我可以用這種方法做我想做的事嗎?任何幫助將不勝感激,謝謝!
uj5u.com熱心網友回復:
您還需要使用擴展運算子e:
onInfoEditSubmit = (props, e, n) => {
if (Object.keys(e).length > 0) {
let dl = new DataLayer()
dl.updateStartupRecord(props.current_startup_or_engagement.id, e)
this.setState(prevState => ({
startup_records: prevState.startup_records.map(
r => r.id === props.current_startup_or_engagement.id ?
{ ...r,
fields: {
...r.fields,
...e // spread operator here
}
}: r
)
}))
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/399038.html
標籤:javascript 反应
上一篇:如何在FirebaseConfigfirebaseV9中呼叫database().ref()方法
下一篇:將C#Dictionary<string,string>傳遞到TypeScriptMap<string,string>
