useEffect使用

1.useEffect是什么?

副作用鉤子:用于處理組件中的副作用,用來取代生命周期函數(shù)。

useEffect(()=>{//副作用函數(shù)
    return ()=>{ // 返回函數(shù)

    }
},[依賴參數(shù)])

2.useEffect可以做什么?

  • 掛載階段:
    從上向下執(zhí)行函數(shù),如果碰到 useEffect 就執(zhí)行并將 useEffect 傳入的副作用函數(shù)推入一個隊列(鏈表),在組件掛載完成之后,將隊列(鏈表)中的副作用函數(shù)執(zhí)行,并將副作用函數(shù)的返還函數(shù),推入一個新的隊列(鏈表)
  • 更新階段 - !!! 更新階段不同于其他階段對應的函數(shù)是否要執(zhí)行,取決于依賴參數(shù):
    從上向下執(zhí)行函數(shù),如果碰到 useEffect 就執(zhí)行并將 useEffect 傳入的副作用函數(shù)推入一個隊列(鏈表),在組件更新完成之后,找出之前的返回函數(shù)隊列,依次準備執(zhí)行,在執(zhí)行前會判斷該 useEffect 的依賴參數(shù),如果依賴參數(shù)改變就執(zhí)行,否則跳過當前項去看下一項,然后再執(zhí)行副作用隊列,執(zhí)行時同樣判斷依賴是否變化,來決定其是否執(zhí)行,如果執(zhí)行,就重新獲取其對應的返回函數(shù)。
  • 卸載階段:
    組件即將卸載時,找出其對應的返回函數(shù)隊列,依次執(zhí)行

3.常規(guī)處理副作用的幾種情況:

依賴參數(shù)不同時有不同的效果:
為空: 組件的任何更新,該 useEffect 對應的返回函數(shù)和函數(shù)都執(zhí)行
為空數(shù)組: 不監(jiān)聽組件的更新
數(shù)組中有具體依賴:對應的依賴數(shù)據(jù),有變化的時候,才會執(zhí)行

  1. 組件掛載完之后做某事
useEffect(()=>{
    console.log("組件掛載完之后執(zhí)行");
    return ()=>{

    }
  },[]);
  1. 組件掛載完成及更新完成做某事
useEffect(()=>{
    console.log("組件掛載完成之后及更新完成之后執(zhí)行");
})
  1. 組件更新完做某事
const isMounted = useRef(false);
useEffect(()=>{
    if(isMounted.current){
        console.log("組件更新完成")
    } else {
      isMounted.current = true;
    }
})
  1. 組件即將卸載做某事
useEffect(()=>{
    return ()=>{
      console.log("組件即將卸載時執(zhí)行");
    }
},[]);
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容