据我所知,如果我错了,请纠正我,redux-thunk是一个中间件,它可以帮助我们在操作本身中调度异步函数和调试值,而当我使用redux-promise时,我无法在不实现自己的情况下创建异步函数作为 Action 的机制会引发仅调度普通对象的异常。
这两个包之间的主要区别是什么?在单个页面反应应用程序中使用这两个包或坚持使用 redux-thunk 有什么好处吗?
据我所知,如果我错了,请纠正我,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
还允许您在一个动作创建者中分派多次。无论您选择一个,另一个或两者都完全取决于您的需求/风格。
您可能希望/需要在您的应用程序中同时使用两者。从 redux-promise 开始,用于生成 promise 的常规异步任务,然后随着复杂性的增加扩大规模以添加 Thunks(或 Sagas 等):
redux-promise
将改善您的生活并简化它,快速而轻松。(简而言之,当它们解决时,您不需要考虑“解包”您的承诺,然后编写/发送结果,redux-promise(-middleware) 会为您处理所有无聊的事情。)在这些情况下,它的好处redux-thunk
是它允许您将复杂性封装在您的 action-creator中。
但请注意,如果您的 Thunk 生成并发送 Promise,那么您需要同时使用这两个库:
redux-promise
然后将在 reducer 处处理由 Thunk 生成的单个 promise 的展开,以避免需要的样板文件。(你可以在 Thunks 中做所有事情,用promise.then(unwrapAndDispatchResult).catch(unwrapAndDispatchError)
......但你为什么要这样做?)总结用例差异的另一种简单方法:Redux 操作周期的开始与结束:
redux-promise
是为了你的流程的结束,一旦一切都被归结为简单的承诺,你只想解开它们并将它们的解决/拒绝值存储在商店中
redux-promise-middleware
这是对原始redux-promise
. 它正在积极开发中,并且很好地补充了redux-promise-reducer
.redux-saga
,它与 非常相似redux-thunk
,但基于生成器函数的语法。同样,您可能会将其与redux-promise
.全面披露:我对 Redux 开发相对较新,并且自己也在为这个问题而苦苦挣扎。我将解释我找到的最简洁的答案:
ReduxPromise 在分派操作时返回一个 Promise 作为有效负载,然后 ReduxPromise 中间件解析该 Promise 并将结果传递给 reducer。
另一方面,ReduxThunk 强制动作创建者推迟将动作对象实际分派给减速器,直到调用分派。
这是我找到此信息的教程的链接:https ://blog.tighten.co/react-101-part-4-firebase 。