【问题标题】:Should I have one useDispatch per component?我应该每个组件有一个 useDispatch 吗?
【发布时间】:2020-09-09 10:08:27
【问题描述】:

我正在将 react with redux 项目从类组件转换为钩子。

为了调度动作,我从 react-redux 导入 { useDispatch }。

那么,在每个功能组件中,我都有

const dispatch = useDispatch();

然后

dispatch(someAction())

这是正确的方法还是应该将 const dispatch = useDispatch() 抽象为一个单独的文件并在整个过程中重复使用?

谢谢

【问题讨论】:

  • @BrianThompson 尽管有人可能会争辩说这是基于意见的,但我还是将其添加为答案。
  • 来自Rules of Hooks - "不要在循环、条件或嵌套函数中调用 Hooks。 相反,始终在顶层使用 Hooks反应函数。”

标签: reactjs react-redux react-hooks


【解决方案1】:

不,就像你拥有它一样。把它放在自己的文件中不会增加任何价值,它只是一个包装另一个钩子的自定义钩子。

react-redux 挂钩依赖于上下文,因此您仍然必须在每个组件中调用自定义挂钩,否则它将无法访问所需的上下文。您不能只导出 dispatch 并在导入后将其称为 dispatch(someAction())

您可以查看useDispatch here 的实现。您会注意到它最终使用了useReduxContext,它只是useContext(ReactReduxContext) 的包装。这意味着使用useDispatch 的功能组件必须是设置该上下文的Provider 的子组件。

所以在抽象函数中调用useDispatch 是行不通的。为了让它发挥作用,你首先会失去抽象它的价值。

【讨论】:

    猜你喜欢
    • 2011-01-14
    • 2010-10-24
    • 1970-01-01
    • 2017-02-24
    • 2017-08-16
    • 2020-05-25
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多