Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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
Javascript ESLint希望setState作为useffect的依赖项,但这会导致无限循环(react hooks/deps)_Javascript_Reactjs_Jsx_React Hooks - Fatal编程技术网

Javascript ESLint希望setState作为useffect的依赖项,但这会导致无限循环(react hooks/deps)

Javascript ESLint希望setState作为useffect的依赖项,但这会导致无限循环(react hooks/deps),javascript,reactjs,jsx,react-hooks,Javascript,Reactjs,Jsx,React Hooks,我有以下情况: const [values, setValues] = useState({ username: "", password: "" }); const [submitButton, setSubmitButton] = useState({ disabled: true }); useEffect(() => { const disabled = !(values.username.length && v

我有以下情况:

  const [values, setValues] = useState({
    username: "",
    password: ""
  });

  const [submitButton, setSubmitButton] = useState({
    disabled: true
  });

 useEffect(() => {
    const disabled = !(values.username.length && values.password.length);

    setSubmitButton({ ...submitButton, disabled });
  }, [values]);
这非常好,完全符合我的要求,但ESLint抱怨
react hooks/deps
警告

当我执行eslint autofix时,它会将
setSubmitButton
添加为对useffect的依赖项,但是这会导致无限循环。这看起来很简单,但我不知道我做错了什么。我见过其他人在useEffect中使用setState之类的代码,但没有将其声明为依赖项

您应该使用的是
useState
,它将提供您的状态快照,因此无需直接引用它

setSubmitButton(previous => ({ ...previous, disabled }));
由于
React
已经知道
submitButton
的当前值,并且只有在更改状态时才会运行回调,因此这将发生在组件的作用域之外,并且
eslint
不会生你的气。 用词

我喜欢将这些情况视为“虚假依赖”。是的,伯爵 一个必要的依赖项,因为我们在 效果。然而,我们真正需要的只是count来将其转换为count +1和“发回”以作出反应。但React已经知道当前的计数。我们需要告诉React的就是增加状态- 不管现在是什么


非常感谢!这正是我需要的。如果我需要直接引用那个状态呢?我有一个用例,在这个用例中我必须更新那个状态,并且基于那个状态更新另一个状态。这太模糊了。请把帖子作为一个问题,更详细地描述你的问题。