首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >redux-thunk和redux-promise的区别是什么?

redux-thunk和redux-promise的区别是什么?
EN

Stack Overflow用户
提问于 2016-04-12 23:19:20
回答 3查看 32.2K关注 0票数 98

据我所知,如果我错了,请纠正我,redux-thunk是一个中间件,它帮助我们在操作本身中调度异步函数和调试值,而当我使用redux-promise时,如果不实现我自己的机制,我就无法创建异步函数,因为操作抛出了一个仅调度纯对象的异常。

这两个包之间的主要区别是什么?在一个react应用中同时使用这两个包有什么好处吗?或者坚持redux-thunk就足够了吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-12 23:48:09

redux-thunk允许您的操作创建者返回函数:

代码语言:javascript
复制
function myAction(payload){
    return function(dispatch){
        // use dispatch as you please
    }
}

redux-promise允许他们返回一个承诺:

代码语言:javascript
复制
function myAction(payload){
    return new Promise(function(resolve, reject){
        resolve(someData); // redux-promise will dispatch someData
    });
}

如果您需要异步或有条件地分派操作,这两个库都很有用。redux-thunk还允许您在一个操作创建器中分派几次。你是选择一个,另一个,还是两者都选,完全取决于你的需求/风格。

票数 127
EN

Stack Overflow用户

发布于 2016-06-19 23:30:49

您可能希望/需要在您的应用程序中同时使用这两个工具。从redux-promise开始,用于常规的promise-promise异步任务,然后扩展到添加Thunks (或Sagas等)随着复杂性的增加,

  • 当生活很简单,而你只是在与创建者进行基本的异步工作,并返回一个单一的承诺,那么redux-promise将改善你的生活,并简化它,快速和容易。(简而言之,redux-promise(-middleware)不需要考虑在承诺解析时“解开”它们,然后编写/分派结果。)
  • 但是,当:
    • 可能你的动作创建者想要产生多个承诺,你想将它们作为单独的动作分派给不同的reducers?
    • 或者,在决定如何以及在哪里分派结果之前,你有一些复杂的预处理和条件逻辑需要管理?

在这些情况下, redux-thunk 的好处是它允许您将复杂性封装在操作创建器中。

但请注意,如果您的Thunk生成并分发promises,那么您将希望同时使用这两个库:

  • redux-promise
  • 将组成原始动作并将它们分派出去,然后在reducer(s)处处理由你的Thunk生成的单个promise(s)的展开,以避免所需的样板。(您可以使用promise.then(unwrapAndDispatchResult).catch(unwrapAndDispatchError)在Thunks中执行所有操作...但你为什么要这样做呢?)

总结用例差异的另一种简单方法是: Redux操作周期的开始和结束:

  • 是Redux流程的开始:如果你需要创建一个复杂的动作,或者封装一些粗糙的动作创建逻辑,把它放在你的组件之外,当然也不要放在reducers中。
  • redux-promise用于流的末尾,一旦一切都归结为简单的承诺,您只需将它们解包并将它们的解析/拒绝值存储在存储

备注/参考:

  • 我发现redux-promise-middleware是原始redux-promise背后的思想的更完整和更容易理解的实现。它正在积极开发中,也得到了redux-promise-reducer的很好补充。
  • 还有其他类似的中间件可用于组合/排序复杂的操作:一个非常流行的中间件是redux-saga,它与redux-thunk非常相似,但基于生成器函数的语法。同样,您可能会将其与redux-promise.
  • Here's a great article一起使用,直接比较各种异步组合选项,包括thunk和redux-promise-中间件。(TL;DR:"Redux Promise Middleware与其他一些选项相比,大大减少了样板文件“...“我想我喜欢Saga用于更复杂的应用程序(请阅读:”使用“),而Redux Promise Middleware适用于其他所有应用程序。”)
  • 请注意,在一个重要的情况下,您可能认为需要分派多个操作,但实际上并非如此,而且您可以让简单的事情变得简单。这就是你想让多个reducers对你的异步调用做出反应的地方。但是,没有任何理由说明为什么多个reducers不能监控单个操作类型。您只需要确保您的团队知道您正在使用该约定,这样他们就不会假设只有一个reducer (具有相关名称)可以处理给定的操作。
票数 84
EN

Stack Overflow用户

发布于 2017-01-14 03:27:07

完全公开:我是Redux开发的新手,我自己也在努力解决这个问题。我将转述我找到的最简洁的答案:

当一个动作被分派时,ReduxPromise会返回一个promise作为ReduxPromise的有效负载,然后ReduxPromise中间件会解析这个promise并将结果传递给reducer。

另一方面,ReduxThunk强制动作创建者推迟将动作对象实际分派到reducers,直到调用dispatch。

这里有一个教程的链接,我在那里找到了这个信息:https://blog.tighten.co/react-101-part-4-firebase

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36577510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档