97国产精品视频人人做人人爱,3344在线观看无码,成年人国产视频,欧美日一级片,在线看AV天堂,高清无码一本到东京热,欧美一级黄片一区2区,免费又爽又刺激高潮网址

理解 redux-thunk 源碼

2020-6-5    seo達人

前言

前面幾篇我們就 Redux 展開了幾篇文章,這次我們來實現 react-thunk,就不是叫實現 redux-thunk 了,直接上源碼,因為源碼就11行。如果對 Redux 中間件還不理解的,可以看我寫的 Redux 文章。


實現一個迷你Redux(基礎版)

實現一個Redux(完善版)

淺談React的Context API

帶你實現 react-redux

為什么要用 redux-thunk

在使用 Redux 過程,通過 dispatch 方法派發一個 action 對象。當我們使用 redux-thunk 后,可以 dispatch 一個 function。redux-thunk會自動調用這個 function,并且傳遞 dispatch, getState 方法作為參數。這樣一來,我們就能在這個 function 里面處理異步邏輯,處理復雜邏輯,這是原來 Redux 做不到的,因為原來就只能 dispatch 一個簡單對象。


用法

redux-thunk 作為 redux 的中間件,主要用來處理異步請求,比如:


export function fetchData() {

 return (dispatch, getState) => {

   // to do ...

   axios.get('https://jsonplaceholder.typicode.com/todos/1').then(res => {

     console.log(res)

   })

 }

}

redux-thunk 源碼

redux-thunk 的源碼比較簡潔,實際就11行。前幾篇我們說到 redux 的中間件形式,

本質上是對 store.dispatch 方法進行了增強改造,基本是類似這種形式:


const middleware = (store) => next => action => {}

在這里就不詳細解釋了,可以看 實現一個Redux(完善版)


先給個縮水版的實現:


const thunk = ({ getState, dispatch }) => next => action => {

   if (typeof action === 'function') {

       return action(dispatch, getState)

   }

   return next(action)

}

export default thunk

原理:即當 action 為 function 的時候,就調用這個 function (傳入 dispatch, getState)并返回;如果不是,就直接傳給下一個中間件。

完整源碼如下:


function createThunkMiddleware(extraArgument) {

 return ({ dispatch, getState }) => next => action => {

   // 如果action是一個function,就返回action(dispatch, getState, extraArgument),否則返回next(action)。

   if (typeof action === 'function') {

     return action(dispatch, getState, extraArgument)

   }

   // next為之前傳入的store.dispatch,即改寫前的dispatch

   return next(action)

 }

}


const thunk = createThunkMiddleware()

// 給thunk設置一個變量withExtraArgument,并且將createThunkMiddleware整個函數賦給它

thunk.withExtraArgument = createThunkMiddleware


export default thunk

我們發現其實還多了 extraArgument 傳入,這個是自定義參數,如下用法:


const api = "https://jsonplaceholder.typicode.com/todos/1";

const whatever = 10;


const store = createStore(

 reducer,

 applyMiddleware(thunk.withExtraArgument({ api, whatever })),

);


// later

function fetchData() {

 return (dispatch, getState, { api, whatever }) => {

   // you can use api and something else here

 };

}

總結

同 redux-thunk 非常流行的庫 redux-saga 一樣,都是在 redux 中做異步請求等副作用。Redux 相關的系列文章就暫時寫到這部分為止,下次會寫其他系列。

日歷

鏈接

個人資料

藍藍設計的小編 http://www.0391cbd.com

存檔

主站蜘蛛池模板: 在线观看国产精品第一区免费| 亚洲无码高清一区二区| 国产精品漂亮美女在线观看| 色综合日本| av尤物免费在线观看| 这里只有精品在线播放| 精品国产香蕉在线播出| 欧美精品亚洲二区| 国产性生大片免费观看性欧美| 中文字幕调教一区二区视频| 久久国产亚洲偷自| 亚洲区欧美区| 精品无码国产一区二区三区AV| 国产亚洲精品97AA片在线播放| 欧美成人免费午夜全| 91精品国产综合久久香蕉922| 凹凸精品免费精品视频| 伊在人亞洲香蕉精品區| 欧美成人精品欧美一级乱黄| 国产精品无码影视久久久久久久| 国产91蝌蚪窝| 又猛又黄又爽无遮挡的视频网站| 精品成人一区二区| 国产成人无码播放| 91精品国产91久久久久久三级| 国产乱子伦精品视频| 最新国产你懂的在线网址| 国产区人妖精品人妖精品视频| WWW丫丫国产成人精品| 日韩精品亚洲一区中文字幕| 久久夜色撩人精品国产| 谁有在线观看日韩亚洲最新视频| 欧美成人日韩| 日本国产精品一区久久久| 国产日本一区二区三区| 午夜国产大片免费观看| 中文一区二区视频| 亚洲精选高清无码| 在线a视频免费观看| 激情在线网| 71pao成人国产永久免费视频| 99久久精品国产麻豆婷婷| 69免费在线视频| 在线观看91精品国产剧情免费| 97久久精品人人| 97国产精品视频自在拍| 国产精彩视频在线观看| 麻豆精品视频在线原创| 国产亚洲精品97AA片在线播放| 99伊人精品| 中文字幕永久在线看| 亚洲动漫h| 国产AV无码专区亚洲A∨毛片| 亚洲精品制服丝袜二区| 又猛又黄又爽无遮挡的视频网站| 国产最新无码专区在线| 免费一看一级毛片| 亚洲天堂福利视频| 人妻出轨无码中文一区二区| 中文字幕在线一区二区在线| 国产黑丝视频在线观看| 91国内视频在线观看| 91精品国产麻豆国产自产在线| 亚洲中文字幕无码爆乳| 精品久久人人爽人人玩人人妻| 国产在线拍偷自揄拍精品| 日韩天堂视频| 国产理论最新国产精品视频| av尤物免费在线观看| 91啦中文字幕| 99久久国产自偷自偷免费一区| 亚洲香蕉久久| 国产主播在线一区| 97se亚洲综合不卡| 青草国产在线视频| 久久精品人人做人人爽电影蜜月 | 伊人大杳蕉中文无码| 欧美区在线播放| 99热亚洲精品6码| 91免费国产在线观看尤物| 五月天久久婷婷| aⅴ免费在线观看|