場景:在需要進行修改操作,給整個表單賦值時,在子組件中有依賴父級項如props.test,父級props.test被修改了
子組件:
let [data, setData] = useState<array<any>>([])
useEffect(()=>{
//此處進行了一些初始化獲取數據列表的操作
setData([1,2,3])
},[])
useEffect(()=>{
//此處有根據初始化數據去遍歷,轉換得到值的操作
let min = Math.min(...data)
console.log(min)
},[props.test])
結果:會發現得到的並不是期望的最小值1;
因為此時子組件依賴父級props.test依賴項的useEffect會先執行,data此時是沒有數據的,因為還沒有執行第一個只執行一次的hook,因此結果不相符。
*所以並不是說沒有依賴的,只執行一次的useEffect寫在最上面就會先執行
修改如下,添加依賴項:
useEffect(()=>{
let min = Math.min(...data)
console.log(min)
},[props.test,data])
這樣執行順序就是:父級依賴項props.test的hook執行,然后是不帶依賴項的hook執行一次,最后是帶data的依賴項執行。
也就能得到最終結果了。