![](/img/trans.png)
[英]What are the differences between Redux-Thunk and Redux-Promise when used with Axios apis?
[英]What is the difference between redux-thunk and redux-promise?
據我所知,如果我錯了,請糾正我, redux-thunk是一個中間件,它可以幫助我們在操作本身中調度異步函數和調試值,而當我使用redux-promise時,我無法在不實現自己的情況下創建異步函數作為 Action 的機制會引發僅調度普通對象的異常。
這兩個包之間的主要區別是什么? 在單個頁面反應應用程序中使用這兩個包或堅持使用 redux-thunk 有什么好處嗎?
redux-thunk
允許你的動作創建者返回一個函數:
function myAction(payload){
return function(dispatch){
// use dispatch as you please
}
}
redux-promise
允許他們返回一個 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
結合使用,因為 sagas 會產生您不想用大量樣板文件手動解包和處理的承諾......全面披露:我對 Redux 開發相對較新,並且自己也在為這個問題而苦苦掙扎。 我將解釋我找到的最簡潔的答案:
ReduxPromise 在分派操作時返回一個 Promise 作為有效負載,然后 ReduxPromise 中間件解析該 Promise 並將結果傳遞給 reducer。
另一方面,ReduxThunk 強制動作創建者推遲將動作對象實際分派給減速器,直到調用分派。
這是我找到此信息的教程的鏈接: https ://blog.tighten.co/react-101-part-4-firebase。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.