代码之家  ›  专栏  ›  技术社区  ›  Dean Radcliffe

为什么要在中间件内部处理Observable,而不是调度组合Observarble的输出?

  •  2
  • Dean Radcliffe  · 技术社区  · 8 年前

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

    对我来说,Rx的好处是,您可以采取一系列传入操作,将其中一些映射到其他操作的可观察项,并对整个结果进行flatMap,以获得一系列有序的事件。然后,您可以通过向其发送每个事件,将结果流链接到存储。

    我想我觉得把RxJS的功能放在商店前面对我来说很有意义,但我很困惑为什么要把它放在一个库中 站在商店一边是有道理的。我同意Observables是Epics的一个很好的模型,但我想知道Redux是否被用来关心它永远不应该知道的事情。

    https://www.youtube.com/watch?v=AslncyG8whg ,已经学习Rx几年了,Redux半年了。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Community Tales Farias    7 年前

    商店增强器相互缠绕。使用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 .