數據更新有延時不能及時獲取:
const [state, setState] = useState({ num: 0 }); // 直接更新數據 const doing = () => { setState({ num: 1 }) console.log(state); // { num: 0 } 數據未更新 } // 使用函數返回更新數據 const doing = () => { setState(() => { ... return { num: 1 } }) console.log(state); // { num: 0 } 數據未更新 } // 使用async/await異步等待獲取 const doing = async () => { await setState(() => { ... return { num: 1 } }) console.log(state); // { num: 0 } 數據未更新 }
doing()
調試發現直接更新數據、使用函數返回更新數據、使用async/await異步等待獲取 數據都不能及時更新
解決方案:
const [state, setState] = useState({ num: 0 }); // 直接更新數據 const doing = () => { setState({ num: 1 }) console.log(state); // { num: 0 } 數據未更新 } doing() useEffect(() => { console.log(state); // { num: 1 } 數據已更新 }, [state])
Effect Hook 可以讓你在函數組件中執行副作用操作,給useEffect鈎子傳遞第二參數[state]偵聽數據變化執行鈎子函數,在useEffect內能獲取到更新完的數據