为什么命名函数作为第一个参数传递给 useEffect 不是必需的依赖项?



[已解决] 我相信下面的 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 都会正确发出警告。

相关内容

  • 没有找到相关文章

最新更新