使用?useEffect?完成副作用操作。賦值給?useEffect?的函數(shù)會在組件渲染到屏幕之后執(zhí)行。
在函數(shù)組件主體內(nèi)(這里指在 React 渲染階段)改變 DOM、添加訂閱、設(shè)置定時器、記錄日志以及執(zhí)行其他包含副作用的操作都是不被允許的,因為這可能會產(chǎn)生莫名其妙的 bug 并破壞 UI 的一致性。
清除 effect:通常,組件卸載時需要清除 effect 創(chuàng)建的諸如訂閱或計時器 ID 等資源。要實現(xiàn)這一點,useEffect?函數(shù)需返回一個清除函數(shù)。
effect 的執(zhí)行時機(jī):在瀏覽器完成布局與繪制之后,傳給?useEffect?的函數(shù)會延遲調(diào)用。
effect 的條件執(zhí)行:
? ??默認(rèn)情況下,effect 會在每輪組件渲染完成后執(zhí)行。這樣的話,一旦 effect 的依賴發(fā)生變化,它就會被重新創(chuàng)建。
? ??可以給?useEffect?傳遞第二個參數(shù),它是 effect 所依賴的值數(shù)組。只有當(dāng)所依賴的值數(shù)組改變后才會重新創(chuàng)建。如果你要使用此優(yōu)化方式,請確保數(shù)組中包含了所有外部作用域中會發(fā)生變化且在 effect 中使用的變量,否則你的代碼會引用到先前渲染中的舊變量。
? ??如果想執(zhí)行只運(yùn)行一次的 effect(僅在組件掛載和卸載時執(zhí)行),可以傳遞一個空數(shù)組([])作為第二個參數(shù)。