首页 > 解决方案 > 为什么命名函数作为第一个参数传递给 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

标签: reactjsreact-hooks

解决方案


useEffect不应该返回一个值,除了一个清理函数。

例如:

useEffect(() => {
  return () => {}
}, [])

而您正在使用doSomething,它是在钩子外部指定的,在钩子内部useEffect


推荐阅读