首页 > 解决方案 > 所有的 redux 动作都应该有相应的 reducer 吗?

问题描述

我认为 Redux 对于调试非常有用,因为它可以跟踪您的应用在其开发工具中调度了哪些操作。调度一个动作而不打算用减速器处理它是不好的做法吗?

例如,我想进行 AJAX 调用并根据响应更新本地反应组件状态,但仍希望在开发工具中记录此调用以进行调试。我想创建一个动作创建器,使用 react-redux 的连接包装器中的 react-redux mapDispatchToProps 属性将它连接到我的组件,但我的减速器函数中从来没有处理这个动作的案例。

标签: reactjsreduxreact-reduxredux-reducers

解决方案


不必要。一个常见的例子是触发一个中间件拦截、解释的动作,并且根据动作的内容可能会或可能不会触发一个或多个后续动作,甚至可能会吞下您触发的原始​​动作(即不会在链,因此它实际上从未到达任何减速器)。

无论它是否吞下动作,在很多情况下您只对中间件触发的后续动作感兴趣,因此无论如何可能不会在任何减速器中处理该原始动作。

这种模式可以在例如redux-promise-middleware中看到

但是,您在此处描述的用例仅出于记录目的而使用操作,我建议您不要这样做。这不是世界上最糟糕的事情,但实际上 Redux 操作应该做一些事情- 使用它来记录发生的事情可能是一种误用,并且过于混乱(想象一下有人维护这段代码,花了一段时间试图弄清楚如果此操作有任何作用,那么如果它没有做任何事情的事实是错误或故意等)。只是使用console.log更简单,更清晰。


推荐阅读