【问题标题】:Which redux middleware should I choose?我应该选择哪个 redux 中间件?
【发布时间】:2018-10-06 17:45:26
【问题描述】:
【问题讨论】:
标签:
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 有助于防止我们犯这些错误,因为它没有赋予我们调度功能的力量,但允许我们做我们以前做的所有事情。