在React 的useEffect 鉤子中使用非同步函數時,您可能會遇到一條警告,指出「useEffect函數必須傳回清理函數或什麼也不回傳。
在 React 版本 小於 18 中,通常建議在 useEffect 中使用匿名函數來避免需要單獨的清理功能。但是,如果您為了清晰或可重複使用性而偏好使用命名函數,則可以使用兩種方法:
將非同步函數移到useEffect 之外:
在useEffect 之外定義非同步函數並直接呼叫它。這種方法消除了 useEffect 中對清理函數的需求。
將Callback 與useCallback 和useEffect 一起使用:
如果您需要使用命名useEffect 中的函數並觀察依賴項的變化,您可以使用useCallback 來包裝您的函數並將其傳遞給useEffect 作為依賴。這確保如果依賴項發生變化,useEffect 將再次運行,從而觸發先前函數呼叫的清理。
對於 React 版本 18 及更高版本,使用 Suspense建議用於功能組件內的資料取得。 Suspense 可讓您處理非同步操作,同時提供後備 UI,直到資料可用。這種方法消除了對清理函數和潛在競爭條件的需求。
這是使用 Suspense 的簡化範例:
以上是為什麼我的 React useEffect Hook 與非同步函數會拋出清理警告,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!