使用useState的賦值函數異步更新問題


代碼的意圖旨在隨着count的更新,實時累加更新sum的值。
卻發現在執行setSum后,打印sum的值為上一次得到的和。
究其原因,猜測是因為setSum異步了,導致打印的sum是還未計算完成的上一次的值。

import React, {useState,useEffect} from "react"; export default function Example() { // 聲明一個叫 "count" 的 state 變量 const [count, setCount] = useState(0); const [sum, setSum] = useState(0); useEffect(()=>{ console.log(count); //第一次結果0,第二次結果1,第三次結果2,第四次結果3,第五次結果4 console.log(sum+count);//第一次結果0,第二次結果1,第三次結果3,第四次結果6,第五次結果10 setSum(sum+count); console.log(sum); //第一次結果0,第二次結果0,第三次結果1,第四次結果3,第五次結果6 },[count]) return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> ); }



解決方式:
再寫一個副作用Hook,只用於監視sum值的變化,從而進行操作
useEffect(()=>{
console.log(sum);
},[sum])

這樣子,當上一個useEffect執行完setSum后,下一個useEffect監視到sum值的變化,從而打印sum值。邏輯操作可以在此處執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM