1 回答
TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
問(wèn)題:
在觸發(fā)新渲染之前(在函數(shù)頂部),您的異步處理程序?qū)?code>dataStruction?關(guān)閉。data1?setData1([]);async
發(fā)生這種情況是因?yàn)?React 狀態(tài)更新是批量且異步的。
簡(jiǎn)單的解決方案:
如果您擺脫(刪除該行)setData1([]);并更改setData1([...data1, { ...element1, level: 1 }]);為setData1([{ ...element1, level: 1 }]);,那么您將得到一個(gè)包含新元素的數(shù)組,而不保留“舊”元素。
替代解決方案:
您還可以將狀態(tài)更新包裝到如下函數(shù)中:
轉(zhuǎn)這個(gè):setState("foo")
進(jìn)入這個(gè):setState((state, props) => "foo")
第二種形式(傳遞函數(shù)而不是直接傳遞狀態(tài))可確保引用正確的狀態(tài)。因此,在您的情況下,第二個(gè)狀態(tài)更新將引用更新后的狀態(tài)。
添加回答
舉報(bào)
