当前位置: 首页 > 知识库问答 >
问题:

如何修复使用useEffect React挂钩时丢失的依赖项警告?

鱼浩荡
2023-03-14

使用React 16.8.6(在以前的版本16.8.3上很好)时,当我试图防止fetch请求上的无限循环时,会出现这个错误

./src/components/BusinessesList.js
Line 51:  React Hook useEffect has a missing dependency: 'fetchBusinesses'.
Either include it or remove the dependency array  react-hooks/exhaustive-deps

我一直找不到一个解决方案来停止无限循环。我希望不要使用usereducer()。我确实找到了这个讨论https://github.com/facebook/react/issues/14920,其中一个可能的解决方案是如果您认为您知道自己在做什么,您可以始终//eslint-disable-next-line react-hooks/exalittive-deps。我对自己在做什么不太有信心,所以我还没有尝试实现它。

我有这个当前的设置React hook useEffect runs continuous forever/infinite loop,唯一的注释是关于useCallback(),我不熟悉。

当前如何使用useEffect()(我只想在开始时运行一次,类似于ComponentDidMount())

useEffect(() => {
    fetchBusinesses();
  }, []);
const fetchBusinesses = () => {
    return fetch("theURL", {method: "GET"}
    )
      .then(res => normalizeResponseErrors(res))
      .then(res => {
        return res.json();
      })
      .then(rcvdBusinesses => {
        // some stuff
      })
      .catch(err => {
        // some error handling
      });
  };

共有1个答案

宇文学博
2023-03-14

如果您没有在效果之外的任何地方使用FetchBusinesss方法,您可以简单地将它移到效果中并避免出现警告

useEffect(() => {
    const fetchBusinesses = () => {
       return fetch("theURL", {method: "GET"}
    )
      .then(res => normalizeResponseErrors(res))
      .then(res => {
        return res.json();
      })
      .then(rcvdBusinesses => {
        // some stuff
      })
      .catch(err => {
        // some error handling
      });
  };
  fetchBusinesses();
}, []);

但是,如果您在render之外使用FetchBusiness,则必须注意两件事

  1. fetchbusiness在带封闭闭包的挂载过程中使用时,您不将其作为方法传递,这有问题吗?
  2. 您的方法是否依赖于它从封闭闭包中接收的一些变量?您的情况并非如此。
  3. 在每次呈现时,fetchBusinesses都将被重新创建,因此将其传递给useEffect会引起问题。因此,如果要将FetchBusinesss传递给依赖项数组,首先必须将其记忆。

综上所述,如果您在useEffect之外使用fetchbusiness,您可以使用//eslint-disable-next-line react-hooks/exalttive-deps禁用规则,否则您可以在useEffect中移动该方法

若要禁用该规则,您可以将其编写为

useEffect(() => {
   // other code
   ...

   // eslint-disable-next-line react-hooks/exhaustive-deps
}, []) 
 类似资料:
  • 所以我正在构建一个反应应用程序,我试图通过使用axios的自定义钩子简化调用我的后端api。这个钩子保持加载和错误状态,这样我就不必在发出请求的每个组件中保持该状态。它还公开了一个调用Api()函数,该函数发出实际请求,然后更改钩子中的状态。这是自定义钩子的代码。 然后,我尝试在我想要发出请求的组件中的useEffect钩子中使用这个callApi()方法。 这是预期的工作,但我的linter(设

  • 当我在React应用程序中使用ScrollToTop组件时,浏览器中会出现以下警告: 第12:6行:React Hook useEffect缺少依赖项:“history”。包括它或删除依赖项数组react hooks/dep 我可以做什么更改来删除此警告?谢谢

  • 错误: ./src/containers/administration/dwConnections/switch。js第11:6行:React Hook useEffect缺少依赖项:“enabled”。包括它或删除依赖项数组react hooks/dep

  • 问题内容: 使用React 16.8.6(在以前的版本16.8.3中很好),当我尝试防止在获取请求上发生无限循环时,出现此错误 我一直找不到停止无限循环的解决方案。我想远离使用。我确实在https://github.com/facebook/react/issues/14920找到了这个讨论,在这里可能的解决方案是我不确定自己在做什么,所以我还没有尝试实现它。 我有这个当前设置,React钩子us

  • 问题内容: 尝试使用带有Java 1.7的全新安装的Apache Maven 3.1.0将Java库添加到本地Maven存储库。这是添加Java存档文件的方式: 这创建了以下目录结构: 该项目的文件引用了从属项目(上面的树),如下所示: 问题 运行后,返回以下错误(在Pastebin上的完整日志): 该文档指出了可能存在的许多问题,但是似乎没有一个适用。 主意 根据文档,我尝试了以下操作: 将默认

  • 我只是从我当地的回购协议中克隆了一个Android项目,我很难“构建”它。也许它错过了一些外部图书馆,但我不知道。 在开始等级构建时,我得到以下信息: 我试着检查“清单”文件,但我找不到。我完全迷路了... 我很确定这是一个配置错误,因此我可以在这里找到所有的配置文件: settings.gradle代码 (来自项目文件夹内)的输出如下: