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
添加回答
舉報
