在useEffect中依赖dispatch的作用是什么?为何不用空依赖数组?
关于
useEffect依赖dispatch的疑问解答 把dispatch作为useEffect依赖项的意义
- Redux官方提供的
useDispatch()返回的dispatch函数,在绝大多数常规场景下引用是稳定的——只要你的store是全局单例、用标准Provider包裹组件树,它不会随组件重渲染改变。但把它加入依赖数组有两个实际价值:- 符合ESLint的
react-hooks/exhaustive-deps规则:这个规则强制要求effect中用到的所有外部变量都必须声明为依赖,避免因闭包遗漏导致的逻辑错误。加上dispatch能让代码规范合规,不用额外加注释禁用规则。 - 兼容特殊场景:如果项目里存在动态创建store、自定义Provider封装(比如组件内部创建store,或者Provider的
storeprop动态变化),dispatch的引用可能会改变。把它加入依赖,能保证effect在dispatch更新时重新执行,避免使用旧实例导致的action触发异常。
- 符合ESLint的
为什么不直接用[]作为依赖数组
- 如果用
[],effect只会在组件挂载时执行一次。但如果dispatch的引用真的发生变化(比如上述特殊场景),effect里捕获的还是旧的dispatch实例,可能导致无法正确触发action、无法更新store。 - 另外,直接用
[]会触发ESLint的依赖缺失警告,虽然可以用注释忽略,但这种做法会掩盖真正的依赖遗漏问题,不如把dispatch加入依赖数组更安全规范。
内容的提问来源于stack exchange,提问作者johann1301s
相关产品推荐
相关产品推荐

