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

React useEffect警告以放置缺少的依赖项。但是钩子中的依赖项值会发生变化

楚宪
2023-03-14

我想在步骤的值更改时更改formStepTouched的值,因此我使用useEffect。但useEffect发出警告,它缺少对FormStepTouch的依赖性。由于这是正在更改的值,因此将其放入依赖项数组将导致无限调用。

 const [step, setStep] = useState(0);
 const [formStepTouched, setFormStepTouched] = useState(
    Array(childrenArray.length)
      .fill(false)
      .map((_, idx) => idx === 0)
 )

 useEffect(() => {
    const newFormStepTouched = [...formStepTouched];
    newFormStepTouched[step] = true;
    setFormStepTouched(newFormStepTouched);
  }, [step]);

请参阅下面的codesandbox链接:https://codesandbox.io/s/brave-gould-ymjt0?file=/src/App.js

正如您所看到的,演示工作非常完美,但是显示了一条错误消息。如果添加依赖项,则将无限调用useEffect。

如何消除错误消息。

共有2个答案

赫连智
2023-03-14
   useEffect(() => {
    setFormStepTouched(prevState =>  {
      const newFormStepTouched = [...prevState]
      newFormStepTouched[step] = true
      return newFormStepTouched
    });
  }, [step]);

短毛是告诉你,有一个外部依赖,可能会改变,你可以在这里阅读更多

况弘新
2023-03-14

您可以将回调传递给状态设置器:

const { useEffect, useState } = React;

const App = () => {
  const [step, setStep] = useState(0);
  const [formStepTouched, setFormStepTouched] = useState(
    Array(5)
      .fill(false)
      .map((_, idx) => idx === 0)
  );

  useEffect(() => {
    //pass a callback to state setter
    setFormStepTouched((formStepTouched) => {
      if (formStepTouched[step] === true) {
        //nothing to change
        return formStepTouched;
      }
      return formStepTouched.map((s, i) =>
        i === step ? true : s
      );
    });
  }, [step]);

  return (
    <div>
      <button onClick={() => setStep(step + 1)}>
        nex step
      </button>
      <div>
        <pre>
          {JSON.stringify(formStepTouched, undefined, 2)}
        </pre>
      </div>
    </div>
  );
};

ReactDOM.render(<App />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="root"></div>
 类似资料:
  • 我在useeffect钩子上得到以下错误。 React Hook use效应有一个缺失的依赖项:当前页面。要么包含它,要么删除依赖array.eslintreact-钩子/穷举-deps 你知道我为什么会得到这个吗? }

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

  • 我试图在Tomcat服务器上部署一个基于spring的web应用程序,但我无法自动连接EntityManager。根本原因是错误。 我假设我有不正确的HibernateJAR作为依赖项。任何帮助都将不胜感激 我之前看到一篇帖子指出,问题在于包含了以下依赖项,但我不包括这一项: 以下是我的POM依赖项:

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

  • 问题内容: 我正在使用Jersey上传文件。我定义了方法: 并调用Jersey客户的呼叫进行测试: 但是,我得到: 严重:缺少方法public java.util.Collection ImageResource.uploadImage(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition)的依赖关系将j

  • 我正在尝试学习spring boot,但有一个测试案例失败了。我有下面的pom文件,其中包含了< code > spring-boot-starter-test 依赖项。据我所知,它应该从测试库拉必要的库,包括Mockito,JUnit等。在我的测试用例文件中,尽管我在maven dependencies下看到了JUnit jar,但是导入并没有得到解析。您能指导我解决这个问题吗,这样我就可以成功