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