REDX有什么区别?

据我所知并纠正我,如果我错了,redux-thunk是一个中间件,它可以帮助我们在动作本身中调度异步函数和调试值,而当我使用redux-promise时,我无法创建异步函数而不实现我自己的机制作为Action引发仅调度普通对象的异常。

这两个软件包的主要区别是什么? 在单个页面反应应用程序中使用这两个软件包或坚持使用redux-thunk会有什么好处?


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

function myAction(payload){
    return function(dispatch){
        // use dispatch as you please
    }
}

redux-promise允许他们兑现承诺:

function myAction(payload){
    return new Promise(function(resolve, reject){
        resolve(someData); // redux-promise will dispatch someData
    });
}

如果需要异步或有条件地分派操作,这两个库都很有用。 redux-thunk还允许您在一个动作创建者内多次分派。 无论你选择哪一种,其他或两者完全取决于你的需求/风格。


你可能想要/需要在你的应用程序一起。 从减少约定开始,例行承诺产生异步任务,然后按照复杂度增加来扩展以添加Thunk(或Sagas等)

  • 当生活很简单,并且你只是与创造者一起做基本的异步工作而返回一个单一的承诺时,那么redux-promise将会改善你的生活并简化它,快速而简单。 (简而言之,您不需要考虑在解决问题时“解开”您的承诺,然后编写/分发结果,而是使用redux-promise(-middleware)来为您处理所有无聊的事情。)
  • 但是,在下列情况下,生活变得更加复
  • 也许你的行动创造者想要产生几个承诺,你想分开作为单独的行动来分离减速器?
  • 或者,在决定如何以及在何处分派结果之前,您需要处理一些复杂的预处理和条件逻辑。
  • 在这些情况下, redux-thunk的好处是它可以让你在行动创建者内部封装复杂性

    但是请注意,如果你的Thunk产生和发送承诺,那么你会想同时使用这两个库:

  • Thunk将组成原始动作并发送它们
  • 然后, redux-promise将会在reducer中处理由Thunk产生的单个promise,以避免产生的样板文件。 (你可以在promise.then(unwrapAndDispatchResult).catch(unwrapAndDispatchError)做所有事情,用promise.then(unwrapAndDispatchResult).catch(unwrapAndDispatchError) ...但你为什么?)

  • 另一种总结使用情况差异的简单方法是: Redux行动周期的开始与结束

  • Thux是你的Redux流程的开始:如果你需要创建一个复杂的动作,或者封装一些粗糙的动作创建逻辑,把它放在你的组件之外,并且绝对不是减速器。
  • redux-promise是为了结束您的流程,一旦所有事情都被简化为简单的承诺,并且您只是想打开它们并将其已解决/拒绝的价值存储在商店中
  • NOTES / REFS:

  • 我发现redux-promise-middleware是原始redux-promise背后更完整和可理解的实现。 它正处于积极的发展阶段,并且还被redux-promise-reducer完美地补充。
  • 还有其他类似的中间件可用于组合/排序复杂动作:一种非常流行的中间件是redux-saga ,它与redux-thunk非常相似,但是基于生成器函数的语法。 再次,你可能会将它与redux-promise一起使用。
  • 这里有一篇很棒的文章,直接比较了各种异步组合选项,包括thunk和redux-promise-middleware。 (TL; DR:“Redux Promise Middleware与其他一些选项相比,可以显着降低样板文件的性能......”“我认为我更喜欢Saga用于更复杂的应用程序(读取:”使用“),以及Redux Promise Middleware的其他一些功能。 )
  • 请注意,有一个重要的情况,您可能认为您需要分派多个操作,但您确实不需要,而且您可以将简单的事情保持简单。 这就是您希望多个减速器对您的异步呼叫做出反应的地方。 但是,根本没有理由为什么多个减速器无法监控单个动作类型。 你只是想确保你的团队知道你在使用这个约定,所以他们不会认为只有一个reducer(有一个相关的名字)可以处理给定的动作。

  • 完全披露:我对Redux开发比较陌生,自己也在为这个问题而苦苦挣扎。 我将解释我发现的最简洁的答案:

    ReduxPromise在分派动作时返回承诺作为有效负载,然后ReduxPromise中间件将解析该承诺并将结果传递给reducer。

    另一方面,ReduxThunk强制动作创建者在实际调度动作对象到减速器之前阻止,直到调用调用。

    这里有一个指向我发现这个信息的教程的链接:https://blog.tighten.co/react-101-part-4-firebase。

    链接地址: http://www.djcxy.com/p/59055.html

    上一篇: What is the difference between redux

    下一篇: Async actions in Redux