[已解决] 我相信下面的 2 种效果应该具有相同的效果。 但是为什么 eslint 规则在第二种情况下没有抱怨呢?
在这两种情况下,它都应该是强制性依赖关系,因为doSomething可以改变和改变效果。
const doSomething = useCallback(() => {
void someProp;
}, [someProp]);
useEffect(()=> doSomething(), [doSomething]); // eslint(react-hooks/exhaustive-deps) complains if I remove the dependency
useEffect(doSomething, []); // no complaint here, why?
编辑: 它实际上在一段时间前就已经修复了(甚至在我写这个问题之前(。 https://github.com/facebook/react/pull/18435
useEffect
不应返回值,清理函数除外。
例如:
useEffect(() => {
return () => {}
}, [])
而且您正在使用doSomething
,这是在钩子外部指定的,在useEffect
钩子内部指定的。
useEffect
的第二个参数是依赖数组,您可以在其中描述如果给定值发生更改,效果应该运行。 在第二种情况下,doSomething
函数不是效果使用的东西,而是效果函数本身。
如果你在你的效果函数中使用它,eslint 会通知它。
useEffect(() => {
doSomething();
}, []);
它实际上在一段时间前就被修复了(甚至在我写这个问题之前(。
https://github.com/facebook/react/pull/18435
在这两种情况下,eslint-pluging-react-hook 都会正确发出警告。