为什么在中间件中处理Observables - vs调度组合Observable的输出?

时间:2016-09-30 13:24:17

标签: redux rxjs reactive-extensions-js redux-observable

当我看到所有这些中间件鼓励你发送一个异步发出其他动作的动作时,我觉得我正在疯狂吃药。我认为异步CAN(也许应该?)在商店之前完成。

对我来说,Rx的好处是你可以获取传入的动作流,将其中的一些映射到其他动作的可观察对象,并对整个结果进行flatMap以获得有序的一系列事件。然后,您可以通过将每个事件分派到商店来将结果流链接到商店。

将异步放入操作中不仅会使用Redux的简单模型并使其复杂化,但这意味着当您进行时间调度时 - 您可能会触发新的AJAX请求(可以在您擦除时重写历史记录) ?)。

我想我觉得把RxJS的强大功能放在商店面前对我来说很有意义,但是我很困惑为什么一个图书馆把它放进去 这边的商店很有意义。我同意Observables是Epics的一个很好的模型,但是我想知道Redux是否正在关注它不应该知道的事情。

背景:我观看了这段视频https://www.youtube.com/watch?v=AslncyG8whg,已经学习了几年Rx,Redux学了半年。

1 个答案:

答案 0 :(得分:3)

商店增强剂相互缠绕。使用Redux的compose函数,传递给compose的增强子从右到左排序。因此,如果我使用const storeEnhancer = compose(applyMiddleware(...middlewares), DevTools.instrument()),DevTools增强器将环绕真实存储,中间件增强器将环绕DevTools增强器。

这意味着时间旅行调试将仅使用已经通过所有中间件的操作,并且重放这些操作将不会再次通过中间件链。换句话说,只会重播实际影响商店的操作。

另一件需要考虑的事情是,像中间件这样的东西允许访问商店的API以便调度和检查状态,而可以被认为是"内部"商店,但最终的关键是他们在"真实"之上的一层处理。存储本身。

您可能希望阅读Dan关于中间件和异步行为的优秀文章:How to dispatch a Redux action with a timeout?Why do we need middleware for async flow in Redux?,这有助于澄清中间件的原因,以及其他链接和解释http://redux.js.org/docs/FAQ.html#actions-side-effects