網站搜尋

javascript - 如何繞過自定義 Hook 的 useEffect 依賴項?


這是我的範例程式碼:

const { getConversionList, conversionList } = useConversion();

useEffect(() => {
  getConversionList();
}, []);

useConversion 是一個 GraphQL 解析器掛鉤,我收到 Linting 錯誤提示需要添加依賴。但如果我添加依賴,則會導致無限渲染。

我如何才能安全地繞過它?

嘗試通過添加依賴導致無限渲染。我希望 useEffect 僅在加載時運行一次,因此添加了 [] 作為依賴

答案#1

你可以透過使用 useRef 鉤子來追蹤該 effect 是否已經執行過,從而確保 useEffect 只執行一次:

const { getConversionList, conversionList } = useConversion();
const hasFetchedRef = useRef(false);

useEffect(() => {
  if (!hasFetchedRef.current) {
    getConversionList();
    hasFetchedRef.current = true;
  }
}, [getConversionList]);

答案#2

  1. 對這一特定行禁用 linting 規則。
  2. 使用 ref 來存儲函數,這樣它在每次渲染時就不會改變。
import { useEffect, useRef } from 'react';
const { getConversionList, conversionList } = useConversion();
    
const getConversionListRef = useRef(getConversionList);
    
useEffect(() => {
  getConversionListRef.current();
}, []);