reactjs - 所有的 redux 动作都应该有相应的 reducer 吗?
问题描述
我认为 Redux 对于调试非常有用,因为它可以跟踪您的应用在其开发工具中调度了哪些操作。调度一个动作而不打算用减速器处理它是不好的做法吗?
例如,我想进行 AJAX 调用并根据响应更新本地反应组件状态,但仍希望在开发工具中记录此调用以进行调试。我想创建一个动作创建器,使用 react-redux 的连接包装器中的 react-redux mapDispatchToProps 属性将它连接到我的组件,但我的减速器函数中从来没有处理这个动作的案例。
解决方案
不必要。一个常见的例子是触发一个中间件拦截、解释的动作,并且根据动作的内容可能会或可能不会触发一个或多个后续动作,甚至可能会吞下您触发的原始动作(即不会在链,因此它实际上从未到达任何减速器)。
无论它是否吞下动作,在很多情况下您只对中间件触发的后续动作感兴趣,因此无论如何可能不会在任何减速器中处理该原始动作。
这种模式可以在例如redux-promise-middleware中看到
但是,您在此处描述的用例仅出于记录目的而使用操作,我建议您不要这样做。这不是世界上最糟糕的事情,但实际上 Redux 操作应该做一些事情- 使用它来记录发生的事情可能是一种误用,并且过于混乱(想象一下有人维护这段代码,花了一段时间试图弄清楚如果此操作有任何作用,那么如果它没有做任何事情的事实是错误或故意等)。只是使用console.log
更简单,更清晰。
推荐阅读
- python - PyPi 安装的应用程序因 ModuleNotFound 而失败
- java - IntelliJ 指示尽管使用 Java 14 增强型开关块不起作用
- powershell - Powershell函数从管道接收多个参数
- c++ - 如何使用 CUDA 库将非零值替换为特定整数?
- swift - UIActivityViewController 不显示所有选项
- java - JasperReports NullPointer 仅在从编译的 jar 运行时
- javascript - react redux-thunk 将状态包装在另一个状态中
- java - 一旦达到 256 个元素,Flux.range 就会等待发射更多元素
- python - 如何更新股票 API 中的价格不会更新
- angular - 为什么 ion-input + angular-onscreen-material-keyboard 不起作用