【dva】model中effects函數的解析


結構

 effects: {
    *pageQuery({ payload = {} }, { select, call, put }) {
      const res = yield call(pageQuery, payload);
      const list = yield select((s) => s.commodity.list);
      yield put({
        type: 'save',
        payload: {
          detail: res.result,
        },
      });
    },
}

 

 

 首先確認一點,effects里面的函數都是Generator函數.然后我們對里面的一些關鍵詞進行分類來區分為啥effects里面的函數的函數要這么寫.

 

yield

固定關鍵詞,Generator函數自帶的關鍵詞,和"*"搭配使用.有點像async和await,使用"*"則表明它是Generator函數,然后每使用一個"yield"就是告訴程序這里是異步,需要等待這個后面的代碼執行完成.同步代碼可不使用該關鍵詞

 

payload

view端通過dispatch傳過來的payload同名參數

 

select, call, put

dva中effects函數的固定傳參,他們分別對應不同的功能,用於不用場景

select

拿到model中state的數據

 const list = yield select((s) => s.commodity.list); 

 call

第一個參數是一個異步函數,payload是參數,可以通過call來執行一個完整的異步請求,又因為yield的存在,就實現了異步轉同步的方案

const res = yield call(pageQuery, payload)

 put

可以使用同model中的reducers或者effects,通過reducers來實現數據到頁面的更新.可以通過put實現effect的嵌套使用

 yield put({
        type: 'save',
        payload: {
          detail: res.result,
        },
      });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM