dva -Model


一、Action 是js對象,是改變State的唯一途徑

  通過dispatch函數分發。

  dispatch({ type: 'user/add', // 如果在 model 外調用,需要添加 namespace payload: {}, // 需要傳遞的信息 });

二、dispatch函數

  用於觸發action函數,action只是描述一個行為的對象,dispatch 就是觸發這個行為的方式。Reducer則描述如何改變數據

三、Reducer

  在dva中,reducers聚合積累的結果是當前model的state對象。通過actions傳入的值域當前reduceres中的值進行運算獲得新的值,Reducer必須是純函數。

  app.model({

    namespace:'todos',//model的namespace

    state:[],//model的初始化數據

    reducers:{

      add(state,{payload:todo}){

        return concat(todo);

      }

    }

  })

 dva-Effect  副作用,異步操作,Effects的最終流向是通過Reducers改變state     這個難理解一點點

  

app.model({
   namespace:'todos',
   effects:{
       *addRemote({payload:todo},{put,call,select}){
           const todos = yield select(state = >state.todos);//這邊的state來源於全局的state,select 方法提供獲取全局state的能力,也就是說,在這邊如果你有需要其他model的數據,則可以使用 state.modelName 來獲取
            yield call(addTodo,todo);用於調用異步邏輯,只支持promise
           yield put({type:'add',payload:todo});這里觸發action ,action 所調用的 reducer 或 effects 來源於本 model 那么在 type 中不需要聲明命名空間,如果需要觸發其他非本 model 的方法,則需要在 type 中聲明命名空間,如 yield put({ type: 'namespace/fuc', payload: xxx });
    
         }    
     }  
})        

  

  三、dva - Subscription

    Subscriptions 是一種從 源 獲取數據的方法,語義:訂閱,用於訂閱數據源,然后來根據條件觸發dispatch 需要的action。

import key from 'keymaster';
...
app.model({
  namespace: 'count',
  subscriptions: {
    keyEvent(dispatch) {
      key('⌘+up, ctrl+up', () => { dispatch({type:'add'}) });
    },
  }
});

  

    

  


免責聲明!

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



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