Model:
model是dva最重要的概念吴菠,以下是經(jīng)典的例子:
app.model({
namespace: 'todo',
state: [],
reducers: {
add(state, { payload: todo }) {
// 保存數(shù)據(jù)到 state
return [...state, todo];
},
},
effects: {
*save({ payload: todo }, { put, call }) {
// 調(diào)用 saveTodoToServer橄教,成功后觸發(fā) `add` action 保存到 state
yield call(saveTodoToServer, todo);
yield put({ type: 'add', payload: todo });
},
},
subscriptions: {
setup({ history, dispatch }) {
// 監(jiān)聽 history 變化清寇,當(dāng)進(jìn)入 `/` 時觸發(fā) `load` action
return history.listen(({ pathname }) => {
if (pathname === '/') {
dispatch({ type: 'load' });
}
});
},
},
});
Model包括五個屬性:
namespace:
model的命名空間,同時namespace也是在全局state上的屬性护蝶,只能用字符串华烟,不支持通過.的方式創(chuàng)建多層命名空間。
type:String
state:
初始值
reducers
以key/value的格式來定義reducer滓走。用于處理同步操作垦江,唯一可以修改state的地方,由action觸發(fā)搅方。格式為:(state, action) => newState 或者 [(state, action) => newState, enhancer]
effects:
以key/value格式定義effect。用于處理異步操作和業(yè)務(wù)邏輯绽族,不直接修改state姨涡。由action觸發(fā),可以觸發(fā) action吧慢,可以和服務(wù)器交互涛漂,可以獲取全局 state 的數(shù)據(jù)等等。