Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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 反应:ESLint如何知道何时可以省略useEffect依赖项?_Reactjs_Eslint - Fatal编程技术网

Reactjs 反应:ESLint如何知道何时可以省略useEffect依赖项?

Reactjs 反应:ESLint如何知道何时可以省略useEffect依赖项?,reactjs,eslint,Reactjs,Eslint,React的useffect钩子通常要求将用于添加到依赖项数组的每个外部值。似乎有一些例外,比如从useState的第二个数组项中给出的setState函数,或者从useReducer中给出的dispatch 从我所读到的内容来看,这是因为React保证setState永远不会改变,所以ESLint觉得没有必要在依赖项中要求它。但ESLint怎么知道这一点?有没有一种方法可以让我将某个东西指定为永不改变,让ESLint接受它并允许我省略“伪依赖项” 例如: function useCustomH

React的
useffect
钩子通常要求将用于添加到依赖项数组的每个外部值。似乎有一些例外,比如从
useState
的第二个数组项中给出的
setState
函数,或者从
useReducer
中给出的
dispatch

从我所读到的内容来看,这是因为React保证
setState
永远不会改变,所以ESLint觉得没有必要在依赖项中要求它。但ESLint怎么知道这一点?有没有一种方法可以让我将某个东西指定为永不改变,让ESLint接受它并允许我省略“伪依赖项”

例如:

function useCustomHook() {
  const [state, setState] = useState(false);
  return [state, setState];
}

function App() {
  const [state, setState] = useState(false);
  const [customState, setCustomState] = useCustomHook();

  useEffect(() => {
    setState(true);
  }, []); // ESLint does NOT complain that setState is missing

  useEffect(() => {
    setCustomState(true);
  }, []); // ESLint DOES complain that setCustomState is omitted

  //...
}

上面的
setState
setCustomState
实际上是相同的,那么是什么触发了ESLint呢?

React团队维护了这一点。此插件包含您描述的“smarts”


没有简单的方法可以添加您自己的异常。我知道在很多情况下,您知道不需要它,但最好只包含您自己的函数作为依赖项。如果它们是真正的引用稳定的,那么差异开销几乎是零。如果它们确实因任何原因而改变,您会很高兴它被列为依赖项。

我想这意味着它们“硬编码”了自己的异常。那就够了。我主要是想通过直接通过钩子传递引用来模拟一些功能。“很高兴拥有”,但没什么大不了的。我知道你的意思!然而,我怀疑,如果有人创建了另一个具有相同名称但语义不同的自定义钩子,那么添加您自己的全局异常可能会带来难以发现的bug。所以这可能是最好的。当我们感觉自己知道自己在做什么时,列出额外的依赖项是一件很麻烦的事,但这并没有什么害处。