鍍金池/ 問(wèn)答/HTML/ 不同頁(yè)面觸發(fā)同一個(gè)effect方法,傳的payload參數(shù)各不一樣,是不是每個(gè)頁(yè)

不同頁(yè)面觸發(fā)同一個(gè)effect方法,傳的payload參數(shù)各不一樣,是不是每個(gè)頁(yè)面都要駐留一套state里的對(duì)象全集?

超級(jí)簡(jiǎn)單代碼:

export default {

  namespace: 'sample',

  state: {
        A:[],//查詢結(jié)果
        B:'',//查詢條件B
        C:'',//查詢條件C
        D:'',//查詢條件D
  },

  effects: {
        *query ({ payload }, { call, put }) {
            
            //根據(jù)B,C,D查到A
            const data = yield call(query, payload)
            
      if (data.success) {
        yield put({
          type: 'querySuccess',
          payload: {
            A:data.A,
            B:payload.B,
            C:payload.C,
            D:payload.D,
          },
        })
      }
    },
  },

  reducers: {
      querySuccess (state, action) {        
      return { ...state, ...action.payload }
    },
  },

}

問(wèn)題:
我在不同的頁(yè)面,dispatch觸發(fā)*query方法時(shí)的payload參數(shù)不盡相同
比如A頁(yè)面我dispatch這個(gè)payload里只包含B,C.
而我想繼續(xù)沿用state里原來(lái)D的值,所以不提交D
那么就會(huì)出現(xiàn)

clipboard.png
由此我不得不被迫在每個(gè)要dispatch的頁(yè)面中,全部把B C D作為payload提交進(jìn)query去,盡管有的參數(shù)對(duì)于這個(gè)頁(yè)面一點(diǎn)用處都沒(méi)有,僅僅為了存儲(chǔ)

換句話說(shuō)我在另外一個(gè)模塊X要調(diào)用這個(gè)query進(jìn)行查詢,我就是為了QUERY,根本不想提交任何參數(shù),直接使用state里默認(rèn)存儲(chǔ)的BCD參數(shù)。那X模塊也不得不存儲(chǔ)B C D這樣的參數(shù)才能查詢,那多麻煩?。?/p>

回答
編輯回答
有你在

可以使用select, 看看這個(gè)就懂了https://github.com/dvajs/dva/...

2017年10月21日 08:01