3 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
您正在嘗試直接修改狀態(tài)數(shù)據(jù),但您不能。
您必須調(diào)用函數(shù) setState 來(lái)改變(更改)它的任何數(shù)據(jù)的狀態(tài)。
如何?
this.setState({theData: newState})
嘗試直接對(duì)其進(jìn)行修改將具有您當(dāng)前遇到的行為。

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
在反應(yīng)中,您不能直接編輯您的狀態(tài)變量。您必須創(chuàng)建一個(gè)新的臨時(shí)變量,對(duì)其進(jìn)行編輯然后調(diào)用setState()以實(shí)現(xiàn)您想要的并觸發(fā)重新渲染。
所以你的handleAddItem變成:
handleAddItem(s) {
// Create a copy of items
const newItems = { ...this.state.items }; // Assuming that items is an object
// Edit the copy
newItems[s.listName].push({ name: s.newItem });
// Call setState
this.setState({ items: newItems });
}

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
你不應(yīng)該直接改變狀態(tài)。你應(yīng)該打電話setState:
https://reactjs.org/docs/state-and-lifecycle.html#do-not-modify-state-directly
handleAddItem(s) {
this.setState(({ items }) => {
const updatedItems = {...items};
updatedItems[s.listName] = [...updatedItems[s.listName], { name: s.newItem }];
return {
items: updatedItems
};
});
}
添加回答
舉報(bào)