2 回答

TA貢獻1802條經驗 獲得超10個贊
setColor
是一個改變color
狀態的函數。它不會直接更改color
變量。
每次狀態改變時App
函數都會重新運行。
因此,當它第一次運行時useState("red")
,它調用 ,發現不存在現有狀態,將狀態設置為"red"
然后將狀態 ( "red"
) 分配給color
。DOM 將根據結果進行更新。
setColor("blue");
"blue"
更改導致App
再次運行的狀態。已經存在一個狀態,因此color
設置為"blue"
。它不是用 初始化的"red"
。DOM 將根據結果進行更新。
一秒鐘后,超時解決并將setColor("purple");
顏色設置為"purple"
導致再次App
運行的狀態。已經存在一個狀態,因此設置為。color
"purple"
每次更新 DOM 時,它都會revealColor
傳遞一個新函數,onClick
該函數已關閉color
最近調用的變量App
。
同時,您傳遞給的函數useEffect
僅運行一次(因為您[]
作為第二個參數傳遞),因此color
它關閉的變量是原始變量,您將"red"
在那里記錄。

TA貢獻1831條經驗 獲得超10個贊
這是因為你沒有包含color在 的依賴數組中useEffect。因此,useEffect不知道已經color改變。如果將其包含在依賴項數組中,則每當更改useEffect時都會觸發。color因此,您blue登錄時就可以看到。
useEffect(() => {
setColor("blue");
setTimeout(() => {
console.log(color);
setColor("purple");
}, 1000);
}, [color]); // <- dependency array
添加回答
舉報