Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何修复此“React Hook Useffect缺少依赖项”警告?_Reactjs_React Hooks_Eslint Plugin React Hooks - Fatal编程技术网

Reactjs 如何修复此“React Hook Useffect缺少依赖项”警告?

Reactjs 如何修复此“React Hook Useffect缺少依赖项”警告?,reactjs,react-hooks,eslint-plugin-react-hooks,Reactjs,React Hooks,Eslint Plugin React Hooks,这是我的档案: // useFetcher.js import { useEffect, useState } from "react"; export default function useFetcher(action) { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [data, setData] = useState(null);

这是我的档案:

// useFetcher.js
import { useEffect, useState } from "react";

export default function useFetcher(action) {
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);
  const [data, setData] = useState(null);
  async function loadData() {
    try {
      setLoading(true);
      const actionData = await action();
      setData(actionData);
    } catch (e) {
      setError(e);
    } finally {
      setLoading(false);
    }
  }
  useEffect(() => {
    loadData();
  }, [action]);
  return [data, loading, error];
}
在第21行,eslint投诉:

React Hook useEffect has a missing dependency: 'loadData'. Either include it or remove the dependency array.eslint(react-hooks/exhaustive-deps)
如何修复此问题?

在useEffect中将loadData函数添加到数组中。这将消除投诉:

useEffect(() => {
  loadData();
}, [action, loadData]);

这里最好的方法是在useEffect中定义异步函数:


更多信息请参见。

现在它告诉我“loadData”函数使第21行的useEffect挂钩的依赖项在每次渲染时都发生变化。将其移动到useEffect回调中。或者,将“loadData”定义包装到其自己的useCallback钩子中。如果我将loadData移动到useEffect的回调中,警告将消失。我不熟悉hooks,这是一个好的实践吗?一个好的linter会告诉你这是没有用的,除非loadData来自一个依赖于action的useCallback。如果您将vscode与eslint插件一起使用,并使用最新的create react应用程序创建应用程序,您将看到错误。有趣。我是胡克斯的新手,有关于这个区块范围的文档吗?我强烈建议你阅读D.阿布拉莫夫的这篇文章:如果你不喜欢深潜,你可能想等到这些解释出现在其他地方。就像2013年《React》上映时一样,人们需要一段时间才能认识到一种不同的思维模式并加以传授。到目前为止,我喜欢这个帖子!当您在异步函数完成后设置状态时,您应该
export default function useFetcher(action) {
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);
  const [data, setData] = useState(null);

  useEffect(() => {
    async function loadData() {
      try {
        setLoading(true);
        const actionData = await action();
        setData(actionData);
      } catch (e) {
        setError(e);
      } finally {
        setLoading(false);
      }
    }

    loadData();
  }, [action]);
  return [data, loading, error];
}