【问题标题】:Which redux middleware should I choose?我应该选择哪个 redux 中间件?
【发布时间】:2018-10-06 17:45:26
【问题描述】:

按照指南,我发现了一些用于 redux 应用程序的中间件。

Redux ThunkRedux PromiseRedux Promise MiddlewareRedux ObservableRedux SagaRedux Pack

这只是我们选择哪种中间件的偏好问题。但我并不是要求选择约定。

我想知道它们之间是否存在任何差异,例如性能、浏览器支持、用例​​等。或者我缺少的任何其他内容。我对这些进行了艰苦的研究,但找不到任何文章。

这样我就可以考虑为我的应用程序选择一个中间件。如果我知道不同中间件的特定用例,那么选择中间件对我来说也很棒。

或者,所有中间件都只是约定,我可以为任何类型的 redux 应用程序(小型或大型)选择其中任何一个?

【问题讨论】:

    标签: javascript reactjs redux react-redux


    【解决方案1】:

    To be able to choose one of these libraries 我们必须考虑我们是在构建小型应用程序还是大型应用程序。还可以考虑可用性、代码标准和 JavaScript 知识。它们都是相似的。

    redux-thunk​

    Redux Thunk 中间件允许您编写返回函数而不是动作的动作创建器。 thunk 可用于延迟动作的调度,或者仅在满足特定条件时才调度。它包含方法 dispatch 和 getState 作为参数。

    ​redux-saga​

    redux-saga 是一个库,旨在以可管理且高效的方式执行应用程序的副作用(即异步数据获取和访问浏览器缓存等不纯过程)。测试很简单,因为它使用了 ES6 的生成器特性,使得流程易于作为同步代码阅读。

    redux-observable

    redux-observable 是一个受 redux-thunk 启发的 redux 中间件。它允许开发人员调度一个返回 Observable、Promise 或可迭代操作的函数。当 observable 发出一个动作,或者 promise 解决一个动作,或者 iterable 发出一个动作时,该动作就会像往常一样被调度。

    其他人直接从他们的 github 来源:

    redux-promise

    中间件向调用者返回一个承诺,以便它可以等待操作完成后再继续。这对于服务器端渲染特别有用。

    redux-promise-middleware

    Redux Promise 中间件能够在 Redux 中稳健地处理异步操作创建者:它接受一个承诺并分派待处理、已完成和已拒绝的操作。 中间件也可以与 Redux Thunk 结合使用来链接动作创建者。

    redux 包

    redux-pack 是一个库,它引入了基于 Promise 的中间件,它允许基于 Promise 生命周期的异步操作是声明性的。

    redux 中的异步操作通常使用 redux-thunk 或其他中间件来完成。这种方法的问题在于,它很容易按顺序使用分派,并分派多个“动作”作为同一个交互/事件的结果,而它们可能应该只是一个动作分派。

    这可能会有问题,因为我们将多个分派视为单个事务的所有部分,但实际上,每个分派都会导致整个组件树的单独重新渲染,我们不仅付出了巨大的性能损失,而且还有风险redux 存储处于不一致状态。

    redux-pack 有助于防止我们犯这些错误,因为它没有赋予我们调度功能的力量,但允许我们做我们以前做的所有事情。

    【讨论】:

      【解决方案2】:

      根据我的个人经验(我使用过您列出的大部分中间件)。

      Redux Saga 是要走的路。它有更高的学习曲线,但是一旦你把头放在它上面,它就会变得非常强大

      Redux 传奇

      1. 允许关注点分离
      2. 减少副作用
      3. 可取消的任务(太棒了)
      4. 并行(类似)处理

      一旦您了解了 redux saga,扩展您的应用程序就会变得更加容易。

      https://engineering.universe.com/what-is-redux-saga-c1252fc2f4d1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-15
        • 2014-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-21
        • 2019-06-12
        相关资源
        最近更新 更多