<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      太上老俊

      react系列筆記:第二記-中間件

      中間件所做的事情就是在action發(fā)起后,到reducer之前做擴(kuò)展,實(shí)現(xiàn)的方式是對(duì)store的dispatch進(jìn)行包裝

           store.dispatch => 【middlewales】 => return new store.dispatch

      所以從上面所知,middlewales是需要接受store的dispatch為參數(shù)的,為了進(jìn)行state的一些操作比如跟蹤state變化,則把getState也一同傳入

        middlewales(store.dispatch,store.getState) = > return new dispatch

      然后applyMiddleWales基本上做了一件事就是遍歷了middlewales

        applyMiddleWales(store,[middlewals1,.....])  => return new store.dispatch

       

      官網(wǎng)上也在實(shí)現(xiàn)上分了兩步進(jìn)行解釋大致的實(shí)現(xiàn)

      第一部分:這個(gè)比較簡單,就是把store傳下去,然后把dispatch重新返回來,當(dāng)然在這之間可以做些什么再返回來,比如添加log,捕獲錯(cuò)誤等

      const logger1 =(store) => {
        const next = store.dispatch
        return (action)=>{
          console.log('log1---start')
          let o = next(action);
          console.log('log1---end')
          return o;
        }
      }
      
      const logger2 = (store) => {
        const next = store.dispatch;
        return (action) =>{
          console.log('log2----start');
          let o = next(action);
          console.log('log2-----end')
          return o;
        }
      }
      
      const store = {
          dispatch:()=>{console.log('dispatch----')}
      }
      
      function middle(store,wales){
        wales.forEach(item => {
          store.dispatch = item(store)
        })
      }
      
      middle(store,[logger1,logger2])
      
      //打印:
      //log2 --start
      //log1--start
      //dispacht
      //log1--end
      //log2--end

       

      第二步:這里把middlewales的調(diào)用方式改變了一下,前面是middle(store) => return dispatch,這里是middls(store)(dispatch) => return dispatch

      這么做的好處是不是直接在store身上直接去擴(kuò)展dispatch,而是把dispatch從源頭傳出來,然后返回新的dispatch,最后生成的也是store的一個(gè)副本。

      const newLog1 = (store)=>{
          return (next) => {
              return (action) =>{
                  console.log('newLog1---start')
                  let o = next(action);
                  console.log('newLog1---end');
                  return o;
              }
          }
      }
      
      const newLog2 = (store)=>{
          return (next) => {
              return (action) =>{
                  console.log('newLog2---start')
                  let o = next(action);
                  console.log('newLog2---end');
                  return o;
              }
          }
      }
      
      newLog2(store);//此時(shí)這個(gè)返回的是一個(gè)函數(shù),(next) => return (action)=>{}
      newLog2(store)(store.dispatch)//此時(shí)返回的是一個(gè)函數(shù)  (action)=>{}
      
      const newStore = {
          dispatch:() => console.log('newStore dispatch-----')
      }
      const newMiddle = (store,wales) =>{
          let dispatch = store.dispatch;
          wales.forEach(item => {
              dispatch = item(store)(dispatch);
          })
          return {...store,dispatch};
      }
      const ns = newMiddle(newStore,[newLog1,newLog2]);

       

      posted on 2018-06-01 23:49  太上老俊  閱讀(220)  評(píng)論(0)    收藏  舉報(bào)

      導(dǎo)航

      主站蜘蛛池模板: 国产成人综合色就色综合| 日本一道一区二区视频| 无码va在线观看| 国产麻豆一区二区精彩视频| 一区二区三区国产不卡| 亚洲一区二区三区四区| 日韩精品国产二区三区| 熟妇人妻中文a∨无码| 国产天美传媒性色av| 亚洲AVAV天堂AV在线网阿V| 亚洲一本大道在线| 婷婷国产亚洲性色av网站| 中文字幕精品亚洲二区| 久久99久久99精品免观看| 国产高清视频在线播放www色| 亚洲高清日韩专区精品| 国产国产人免费人成免费| 日韩深夜福利视频在线观看| 久久婷婷成人综合色综合| 国产精品一区二区性色av| 国产成人午夜福利院| 在线看无码的免费网站| 日韩午夜福利片段在线观看| 久久成人国产精品免费软件| 又大又硬又爽免费视频| 蜜臀av一区二区国产在线| 久久99亚洲网美利坚合众国| 国产三级国产精品久久成人| 人妻激情乱人伦视频| 德安县| 亚洲精品一区二区三区蜜臀| 久久SE精品一区精品二区| 丰满无码人妻热妇无码区| 久久伊99综合婷婷久久伊| 久久婷婷国产精品香蕉| 99国产精品永久免费视频| 成人亚洲国产精品一区不卡| 亚洲色一区二区三区四区| 亚洲a免费| 国产精品亚洲二区在线看| 撕开奶罩揉吮奶头视频|