antd pro关键知识点
react+umi+dva+antd
umi
umi是可扩展的企业级前端应用框架,umi以路由为基础的,同时支持配置式路由和约定式路由,保证路由的功能完备, 并以此进行功能扩展。
umi相关路由配置等参考官方文档,可实现按需加载,热更新等,文档地址:umijs.org/zh-CN/docs/
dva
dva介绍
dva 是一个基于 redux 和 redux-saga 的数据流方案,通过 reducers, effects 和 subscriptions 组织 model dva 通过 model 的概念把一个领域的模型管理起来,包含同步更新 state 的 reducers,处理异步逻辑的 effects,订阅数据源的 subscriptions 。
dva 提供了 connect 方法。如果你熟悉 redux,这个 connect 就是 react-redux 的 connect 。把视图和模型连接起来。
dva中文文档地址:https://dvajs.com/guide/
数据流向
数据的改变发生通常是通过用户交互行为或者浏览器行为(如路由跳转等)触发的,当此类行为会改变数据的时候可以通过 dispatch 发起一个 action,如果是同步行为会直接通过 Reducers 改变 State ,如果是异步行为(副作用)会先触发 Effects 然后流向 Reducers 最终改变 State。
案例
app.model({
namespace: 'count',
state: {
record: 0,
current: 0,
},
reducers: {
add(state) {
const newCurrent = state.current + 1;
return { ...state,
record: newCurrent > state.record ? newCurrent : state.record,
current: newCurrent,
};
},
minus(state) {
return { ...state, current: state.current - 1};
},
},
effects: {
*add(action, { call, put }) {
yield call(delay, 1000);
yield put({ type: 'minus' });
},
},
subscriptions: {
keyboardWatcher({ dispatch }) {
key('⌘+up, ctrl+up', () => { dispatch({type:'add'}) });
},
},
});
开发复杂SPA
在其中一个的effect里面做select操作,是可以获取另外一个中的state,从而可以共享全局。 在一个effect中,可以使用多个put来分别调用reducer来更新状态。
把多个要并行执行的东西放在一个数组里,就可以并行执行,等所有的都结束之后,进入下个环节,类似promise.all的操作。
const [result1, result2] = yield all([
call(service1, param1),
call(service2, param2)
])