React Native中useDispatch与useCallback结合的哪种写法正确?
结论
方式1是正确实现,方式2存在本质错误,无法正常运行。
具体原因说明
- 方式2违反了React Hook的核心调用规则
React官方明确规定:所有Hook 只能在组件的最顶层作用域调用,禁止在回调函数、条件分支、循环等嵌套场景下调用。方式2把useDispatch放在了useCallback的回调函数内部,运行时会直接抛出Hook调用规则的报错,根本跑不起来。 - 对
dispatch的封装完全多余useDispatch返回的dispatch函数本身引用就是稳定的,组件多次重新渲染时它的引用不会发生变化,完全不需要额外用useCallback去包一层。就算忽略Hook调用错误,方式2封装出来的dispatch本质是个返回真实dispatch的函数,实际用的时候还得多写一层dispatch()才能拿到可用的实例,平白多了没必要的冗余逻辑。 - 依赖逻辑不符合预期
方式2里add函数依赖的是封装后的函数引用,就算硬改代码绕开了Hook调用报错,实际触发action的时候也很容易漏写一层调用,引发业务bug。
内容的提问来源于stack exchange,提问作者locklock123
相关产品推荐
相关产品推荐

