代碼的意圖旨在隨着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值。邏輯操作可以在此處執行。