所有的 redux 动作都应该有相应的 reducer 吗?
Posted
技术标签:
【中文标题】所有的 redux 动作都应该有相应的 reducer 吗?【英文标题】:Should all redux actions have a corresponding reducer? 【发布时间】:2020-06-08 16:58:27 【问题描述】:我认为 Redux 对于调试非常有用,因为它可以跟踪您的应用在其开发工具中调度了哪些操作。调度一个动作而不打算用减速器处理它是不好的做法吗?
例如,我想进行 AJAX 调用并根据响应更新本地反应组件状态,但仍希望在开发工具中记录此调用以进行调试。我想创建一个动作创建器,使用 react-redux 的连接包装器中的 react-redux mapDispatchToProps 属性将其连接到我的组件,但我的 reducer 函数中从来没有处理这个动作的案例。
【问题讨论】:
我会说我也在这样做,但我还没有看到任何问题,只要你不想看动作是否成功,你不需要减速器。这就像运行一个没有返回值的函数。 【参考方案1】:不一定。一个常见的例子是触发一个中间件拦截、解释的动作,并且根据动作的内容可能会或可能不会触发一个或多个后续动作,甚至可能吞下您触发的原始动作(即不会在链,因此它实际上从未到达任何减速器)。
无论它是否吞下动作,在很多情况下您只对中间件触发的后续动作感兴趣,因此无论如何可能不会在任何减速器中处理该原始动作。
这种模式可以在例如redux-promise-middleware中看到
但是,您在此处描述的用例纯粹出于记录目的而使用操作,我建议您不要这样做。这不是世界上最糟糕的事情,但实际上 Redux 操作应该做一些事情 - 使用它来记录发生了这样的事情可能是一种误用,并且过于混乱(想象有人维护这段代码,花一些时间试图弄清楚这个动作是否有任何作用,然后它没有做任何事情的事实是否是一个错误或故意等等)。只需使用console.log
就更加简单明了。
【讨论】:
以上是关于所有的 redux 动作都应该有相应的 reducer 吗?的主要内容,如果未能解决你的问题,请参考以下文章