react-hooks/exhaustive-deps校验useCallback出现不一致告警的原因是什么
原因分析
react-hooks/exhaustive-deps 是基于静态代码分析实现的 lint 规则,两个告警都有明确的触发前置条件,你提到的第14行写法刚好没有命中触发条件:
- 「存在不必要的依赖项」告警只会在你给
useCallback传当前作用域内定义的内联函数时触发。只有这种情况,lint 才会扫描函数内部代码,对比依赖数组里的变量有没有被实际用到。如果第一个参数是上层作用域定义的变量(比如这里的noop),lint 不会递归回溯这个变量的实际实现逻辑,自然没法判断c是否被使用,所以不会触发该告警。 - 「接收到依赖项未知的函数,请传入内联函数」告警只会在 lint 判定你传入的非内联函数存在不稳定外部依赖时触发。而
noop是通用的无依赖空函数(通常定义为顶层作用域的常量const noop = () => {},内部没有引用任何外部变量),lint 规则内置了对这类无依赖稳定函数的识别,所以不会触发该告警。
另外对于完全无依赖的稳定函数来说,useCallback的包装本身实际意义不大,lint 对这类场景的校验逻辑也会相对宽松,即便依赖数组存在多余项也不会抛出告警。
内容的提问来源于stack exchange,提问作者customcommander
相关产品推荐
相关产品推荐

