1 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
狀態(tài)僅設(shè)置為函數(shù)中呈現(xiàn)的最后一個(gè)組件的位置
map()
。
我認(rèn)為這表明在循環(huán)中對(duì)狀態(tài)更新進(jìn)行排隊(duì)并使用基于值的狀態(tài)更新。IE 每個(gè)腳注都已安裝并調(diào)用footnotePosition
| updatePositions
用他們的位置回調(diào)并覆蓋先前排隊(duì)的狀態(tài)值。
這是您要使用功能狀態(tài)更新的情況。功能狀態(tài)更新有點(diǎn)像 reducer 函數(shù),但它只將當(dāng)前狀態(tài)作為參數(shù)。偽代碼看起來像這樣
setMyState(state => state + update)
這是我的一個(gè) Demo Codesandbox 來幫助說明兩種狀態(tài)更新之間的區(qū)別。
假設(shè)您的其余組件邏輯是合理的(我對(duì)和數(shù)組的相關(guān)性有一些不確定性article
footnotePositions
)那么我有以下建議:
更新您的updatePositions
函數(shù)以使用功能狀態(tài)更新。
const updatePositions = (footnotePosition) => { setFootnotePositions(positions => [...positions, footnotePosition]); }
變化不大,但現(xiàn)在您可以對(duì)多個(gè)狀態(tài)更新進(jìn)行排隊(duì),并且每個(gè)更新都將從先前計(jì)算的“下一個(gè)狀態(tài)”值進(jìn)行更新。
添加回答
舉報(bào)