antd pro使用心得

351 阅读2分钟

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)
])