亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

redux中間件applyMiddleware執行有一點不懂,求解答?

redux中間件applyMiddleware執行有一點不懂,求解答?

萬千封印 2018-10-12 10:13:35
1.我傳入thunk,promise,logger中間件,當dispatch 傳入的action是一個function更新數據,根據thunk的源碼,后面的promise,logger中間件都不會執行。那么logger中間件如何記錄的action的更新數據?var thunk = createThunkMiddleware();thunk.withExtraArgument = createThunkMiddleware;正常執行流程應該是thunk -> promise -> logger -> dispatch -> logger -> promise -> thunk 當我dispatch 傳入的action是一個function更新數據,根據thunk的源碼,后面的promise,logger中間件都不會執行。那么logger中間件如何記錄的action的更新數據?2.在thunk,promise里面都采用的return 下一個next,那么dispatch ->后面的logger -> promise -> thunk那不是都不會執行了嗎?我看著是這兩篇關于applyMiddleware文章鏈接描述,鏈接描述
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

先說結論:

  1. thunk 后面的中間件不走了,自然 logger 也無法記錄。

  2. next 是包裝過后的 dispatch,也就是用來一層層調用 middleware 的,這個看官網的教程應該很好理解。

thunk 中間件的核心是下面這段。

if (typeof action === 'function') {    return action(dispatch, getState, extraArgument);
}return next(action);

thunk 后面中間件不走,是因為它沒有將你的方法通過 next 傳遞給下一個中間件,而是直接調用了你方法,并將 dispatch 傳給了你的方法的第一個參數,這樣使得你可以在你的函數中再使用 dispatch 來 dispatch 一個 action。新 dispatch 的 action 自然會重新走整個 middleware 的流程。

所以,如果你將 logger 置于 thunk 之后,且函數不再 dispatch 一個 action 的話,logger 中間件是不會有記錄的。

需要注意的是,logger 中間件是否執行取決于你 applyMiddleware 的次序,如果,你將例子中 applyMiddleware 的順序倒一倒,logger 中間件還是會走的。


查看完整回答
反對 回復 2018-11-06
  • 1 回答
  • 0 關注
  • 534 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號