Open kangyana opened 1 year ago
dva
是一个基于 redux
和 redux-saga
的数据流方案。
reducer
, saga
, action
之间来回切换。saga
使用太复杂,每监听一个 action
都需要走 fork
-> watcher
-> worker
的流程。entry
使用麻烦。dva
正是用于解决这些问题。
dva
是基于 redux
+ redux-saga
的一层轻量封装,没有引入任何新概念,全部代码不到 100 行。
核心功能是提供了 app.model
方法,用于把 reducer
, initialState
, action
, saga
封装到一起,例如:
app.model({
namespace: 'products',
state: {
list: [],
loading: false,
},
subscriptions: [
function(dispatch) {
dispatch({type: 'products/query'});
},
],
effects: {
['products/query']: function*() {
yield call(delay(800));
yield put({
type: 'products/query/success',
payload: ['ant-tool', 'roof'],
});
},
},
reducers: {
['products/query'](state) {
return { ...state, loading: true, };
},
['products/query/success'](state, { payload }) {
return { ...state, loading: false, list: payload };
},
},
});
这对应使用 redux
时,创建的 sagas/products.js
, reducers/products.js
和 actions/products.js
。
介绍下 model
:
reducer
在 combine
到 rootReducer
时的 key 值。reducer
的 initialState
。saga
,并简化了使用
mobx