使用setState 更新state.item[1]
在這種情況下,您正在嘗試更新物件內的物件使用setState 在在您的狀態中。若要正確更新狀態,您需要複製整個狀態對象,修改副本,然後將狀態設定為更新後的副本。
以下是如何更新 state.item[1] 使用setState:
// 1. Make a shallow copy of the items
let items = [...this.state.items];
// 2. Make a shallow copy of the item you want to mutate
let item = {...items[1]};
// 3. Replace the property you're interested in
item.name = 'newName';
// 4. Put it back into our array. N.B. we *are* mutating the array here,
// but that's why we made a copy first
items[1] = item;
// 5. Set the state to our new copy
this.setState({items});
如果需要,您可以合併步驟 2 和 3:
let item = {
...items[1],
name: 'newName'
}
或你可以在一行中完成整個事情:
this.setState(({items}) => ({
items: [
...items.slice(0,1),
{
...items[1],
name: 'newName',
},
...items.slice(2)
]
}));
注意:在這些範例中,我們假設 items 是一個陣列。如果 items 是對象,您將對對象屬性進行類似的更新。
請記住,在使用 setState 時,您應該始終在修改之前複製先前的狀態,以確保不會意外發生變更原始狀態物件。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3