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

如何修复此警告:“React Hook useEffect缺少依赖项:‘history’”?

邓夕
2023-03-14

当我在React应用程序中使用ScrollToTop组件时,浏览器中会出现以下警告:

第12:6行:React Hook useEffect缺少依赖项:“history”。包括它或删除依赖项数组react hooks/dep

import { useEffect } from 'react';
import { withRouter } from 'react-router-dom';

function ScrollToTop({ history }) {
  useEffect(() => {
    const unlisten = history.listen(() => {
      window.scrollTo(0, 0);
    });
    return () => {
      unlisten();
    }
  }, []);

  return (null);
}

export default withRouter(ScrollToTop);

我可以做什么更改来删除此警告?谢谢

共有3个答案

堵宏毅
2023-03-14
import { useEffect } from 'react';
import { withRouter } from 'react-router-dom';

function ScrollToTop({ history }) {
  useEffect(() => {
    const unlisten = history.listen(() => {
      window.scrollTo(0, 0);
    });
    return () => {
      unlisten();
    }
  }, [history]); // <= you need this

  return (null);
}

export default withRouter(ScrollToTop);

应用程序编程接口:https://reactjs.org/docs/hooks-effect.html例子:

useEffect(() => {
  document.title = `You clicked ${count} times`;
}, [count]); // Only re-run the effect if count changes

在上面的示例中,我们将[count]作为第二个参数传递。这是什么意思?如果计数为5,然后我们的组件在计数仍然等于5的情况下重新渲染,React将比较上一次渲染的[5]和下一次渲染的[5]。因为数组中的所有项都相同(5==5),React将跳过效果。这就是我们的优化。

孙莫希
2023-03-14
js prettyprint-override">import { useEffect } from 'react';
import { withRouter } from 'react-router-dom';

function ScrollToTop({ history }) {
  useEffect(() => {
    const unlisten = history.listen(() => {
      window.scrollTo(0, 0);
    });
    return () => {
      unlisten();
    }
  }, [history]);

  return (null);
}

export default withRouter(ScrollToTop);

history添加到数组中,该数组是useffecthook函数的第二个参数。这样每当history更改时,就会调用unlisten

赖运珧
2023-03-14

您可以将history添加useffect()块的依赖项列表中:

useEffect(() => {
  const unlisten = history.listen(() => {
    window.scrollTo(0, 0);
  });
  return () => {
    unlisten();
  }
}, [history]); // <- add history here

或者您可以导入history,而不是将其作为道具传递,然后避免将其包含在useffect()依赖项中。

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

  • React Hook useEffect缺少依赖项:“dispatch”。要么包含它,要么删除依赖项数组react-hooks/extultive-deps 我使用React Redux中的钩子,作用于如下功能组件:

  • 使用React 16.8.6(在以前的版本16.8.3上很好)时,当我试图防止fetch请求上的无限循环时,会出现这个错误 我一直找不到一个解决方案来停止无限循环。我希望不要使用。我确实找到了这个讨论https://github.com/facebook/react/issues/14920,其中一个可能的解决方案是我对自己在做什么不太有信心,所以我还没有尝试实现它。 我有这个当前的设置React

  • 我在React中得到以下警告 'React Hook useEffect缺少依赖项:'Bakerys'。包括它或移除依赖项数组。如果'set flatbakery'需要'bakerys'的当前值,您还可以用useReducer替换多个useState变量。(反作用-挂钩/穷尽-DEPS)‘ bakerys和Flatbakery是react状态变量。

  • 我在构建我的应用程序时遇到此问题。有人知道怎么回事吗? React Hook useEffect缺少依赖项:“conectar”。包括它或删除依赖项数组react hooks/dep

  • 在我的反应/redux应用程序中,我使用调度来调用每次安装组件时从redux中的状态检索数据的操作。问题正在使用状态发生我的方式不工作 下面是我得到的错误: React Hook useEffect缺少依赖项:“dispatch”。包括它或删除依赖项数组。像“getInvoiceData”这样的外部作用域值不是有效的依赖项,因为对它们进行变异不会重新呈现组件react HOOK/DEP 这是我的密