由axios取消令牌[react-hooks / exhaustive-deps]引起的react useEffect挂钩无限循环

问题描述 投票:0回答:1

[在我的react组件中,我正在使用useEffect来获取组件安装以及每次过滤器更改时的数据。一切正常,但react-hooks/exhaustive-deps发出警告,说明fetcher函数应位于依赖项数组中。通过将fetcher添加到依赖项列表,应用程序将陷入无限循环。每次运行时,提取程序都会收到一个新的Axios取消令牌,这会导致对提取程序的无限循环调用。如何在不禁用规则的情况下处理这种情况?

fetcher函数在useEffect之外,导致另一个回调函数(传递给子级)可能调用fetcher。例如可以编辑用户的模式,并在成功编辑后调用fetcher重新加载新用户]]]

const [isLoading, setIsLoading] = React.useState<boolean>(false);
const [users, setUsers] = React.useState<IUser[]>([]);
const [filters, setFilters] = React.useState<ITableFilters>({...initFilters});

const fetcher = async (s: CancelTokenSource): Promise<void> => {
    setIsLoading(true);
    const params = { ...filters };
    try {
      const { data} = await fetchAllUsers({
        params,
        cancelToken: s.token
      });
      setUsers(data.users);
      setIsLoading(false);
    } catch (error) {
      handleResponseError(error);// wchich checks axios.isCancel
      setIsLoading(false);
    }
}

  React.useEffect(() => {
    const source = axios.CancelToken.source();
    // tslint:disable-next-line: no-floating-promises
    fetcher(source);
    return function cleanup() {
      source.cancel();
    };
  }, [filters]);

在我的react组件中,我使用useEffect来获取组件安装以及每次过滤器更改时的数据。一切正常,但是react-hooks / exhaustive-deps发出警告,表明...

reactjs axios react-hooks use-effect
1个回答
1
投票

您可以使用useCallback,因此对fetcher的引用应保持不变,而不会引起任何重新渲染。

© www.soinside.com 2019 - 2024. All rights reserved.