国产精品爱久久久久久久小说,女人扒开腿让男人桶到爽 ,亚洲欧美国产双大乳头,国产成人精品综合久久久久,国产精品制服丝袜无码,免费无码精品黄av电影,黑色丝袜无码中中文字幕,乱熟女高潮一区二区在线

    理解 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://m.dzxscac.cn

    存檔

    主站蜘蛛池模板: 久久久久人妻精品一区蜜桃| 日韩成人在线免费视频| 亚洲欧美日韩精品久久| 亚洲国产成人精品无码区宅男| 双性皇帝高h喷汁呻吟| 欧美精品成人在线| 无码人妻丰满熟妇区毛片| 免费观看无遮挡www的视频| 宅男av| www.brazzers.com| 国内精品国产成人国产三级| 国产真实乱子伦清晰对白| 欧美亚洲国产精品| 欧美疯狂做受| 国产精品区av| 午夜男女爽爽爽免费体验区| 麻豆av影院| 午夜福利日本一区二区无码| 一本一道久久a久久精品综合| 亚洲精品无码久久久久yw| 欧色图| 国产无人区码一区二区| 国产成人精品亚洲777人妖| 免费人成网视频在线观看| 国产伦理在线| 久久人人爽爽人人爽人人片av| 亚洲一区二区三区写真| 国产卡1卡2卡3精品视频| 亚洲一区二区网站| 人妻丰满熟妇无码区免费| 国产午夜福利在线播放| 亚洲精品国产乱码av在线观看| 国产在线观看你懂的| 激情五月五月婷婷| 夜夜影院未满十八勿进| 婷婷五月六月综合缴情| 天堂资源中文在线| 制服丝袜国产在线| 精品久久国产字幕高潮| 午夜福利精品视频免费看| 婷婷五月在线视频|