useEffect 依赖数组

Posted

技术标签:

【中文标题】useEffect 依赖数组【英文标题】:useEffect dependancy array 【发布时间】:2022-01-11 01:03:55 【问题描述】:

我正在使用 customHook 从 API 获取数据。

const useFetch = () => 
   const dispatch = useDispatch();
   return async (callback, ...props) => 
      try 
         return await callback(...props);
       catch (error) 
         const  msg  = error.response?.data || "Something went wrong";
         dispatch(showModal(msg));
         setTimeout(() => dispatch(hideModal()), 3000);
      
   ;
;

并在 useEffect 中使用它

const customFetch = useFetch();
useEffect(() => 
      (async () => 
         const data = await customFetch(fetchUsers, token);
         if (data) setUsers(data.user);
      )();
   , [token]);

但是 eslint 抱怨缺少 customFetch 依赖项。如果我添加它,它将以无限循环结束。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

所以你只需要在这里useCallback 让回调你返回稳定:

const useFetch = () => 
   const dispatch = useDispatch();
   const fetcher = useCallback(async (callback, ...props) => 
      try 
         return await callback(...props);
       catch (error) 
         const  msg  = error.response?.data || "Something went wrong";
         dispatch(showModal(msg));
         setTimeout(() => dispatch(hideModal()), 3000);
      
   , [dispatch]);
   return fetcher;
;

useMemouseCallback 在这种情况下特别有用,当您需要引用相同的东西,而创建/返回字面上会在每次运行时提供新实例(函数、数组、对象)

【讨论】:

以上是关于useEffect 依赖数组的主要内容,如果未能解决你的问题,请参考以下文章

在 useEffect 中,不提供依赖数组和空数组有啥区别?

useEffect 依赖数组

确定哪个依赖数组变量导致 useEffect 钩子触发

useEffect 依赖数组和 ESLint 穷举-deps 规则

React useEffect - 在依赖数组中传递一个函数

状态更新没有立即反映。如何使用 useEffect 的依赖数组来显示更改?