为何要在useEffect的依赖数组中添加dispatch变量?
为什么React的useEffect依赖数组要加dispatch?
首先明确:useReducer返回的dispatch函数是稳定不变的(组件生命周期内始终是同一个引用),useState返回的setXxx其实也是稳定的。那为什么要把它加到依赖数组里?
必要性和意义
- 符合React的lint规则:
eslint-plugin-react-hooks会强制要求所有在useEffect内部用到的外部变量都加入依赖数组,哪怕它是稳定的。加上dispatch能避免lint报错,也让代码更规范——明确告诉维护者:这个effect里用到了dispatch,它是依赖项。 - 未来兼容性:虽然当前React中dispatch是稳定的,但如果后续React实现调整(概率极低),或者你封装了自定义dispatch(比如带中间件的自定义hook),这时候dispatch可能就会变。提前加入依赖数组,能避免后续出现莫名bug。
- 代码可读性:依赖数组清晰列出所有用到的外部变量,其他开发者一眼就能看出这个effect依赖哪些值触发更新,不用去函数内部逐一查找。
为什么移除dispatch后没变化?
因为dispatch的引用在组件每次渲染时都完全一致,所以不管加不加,effect的触发条件都不会改变——React会判断依赖数组元素是否变化,既然dispatch没变化,移除它后effect的执行时机和之前完全一致,自然看不到差异。
总结
加dispatch到依赖数组更多是规范、lint兼容和未来防护,而非当前功能必需。但遵循这个习惯能让代码更健壮,也符合React官方的最佳实践。
内容的提问来源于stack exchange,提问作者Ajay jangid
相关产品推荐
相关产品推荐

