关于react中antd design pro下面src/models

1.src/models

  在 Ant Design Pro 中,一个完整的前端 UI 交互到服务端处理流程是这样的:

  1.UI 组件交互操作;
  2.调用 model 的 effect;
  3.调用统一管理的 service 请求函数;
  4.使用封装的 request.ts 发送请求;
  5.获取服务端返回;
  6.然后调用 reducer 改变 state;
  7.更新 model。

1 // model
2 {
3   namespace: String, // 命名空间
4   state: Object, // 状态
5   reducer: Object, // 同步更新 state
6   effects: Object, // 副作用:处理异步逻辑
7   subscriptions: Object // 订阅数据源
8 } 

  这些文件被引用在src/pages/.umi/dva中。

  我们以 models/global 为例:

  namespace: 'global' 说明以下此处的dva命名空间为 global,即你调用的时候需要采用 global.XXX 的形式

  其中的 state: {} 是存放状态的,也就是数据。

  reducers 是用来更新 state 的,但是他只能是同步的。所以我们需要 effects 来进行异步更新。

  即:

 1 state: {
 2 collapsed: false,
 3 notices: [],
 4 }, // 存放状态和数据
 5   reducers: { // 用来同步设置state
 6     changeLayoutCollapsed(
 7       state = {
 8         notices: [],
 9         collapsed: true,
10       },
11       { payload },
12     ) {
13       return { ...state, collapsed: payload };
14     },
15 
16     saveNotices(state, { payload }) {
17       return {
18         collapsed: false,
19         ...state,
20         notices: payload,
21       };
22     },
23     // ...
24  }
 1   effects: { // 异步更新state,通过调用同步的reducers实现
 2     *fetchNotices(_, { call, put, select }) {
 3       const data = yield call(queryNotices);
 4       yield put({
 5         type: 'saveNotices',
 6         payload: data,
 7       });
 8       const unreadCount = yield select(
 9         state => state.global.notices.filter(item => !item.read).length,
10       );
11       yield put({
12         type: 'user/changeNotifyCount',
13         payload: {
14           totalCount: data.length,
15           unreadCount,
16         },
17       });
18     },
19     // ...
20  }




原文地址:https://www.cnblogs.com/jack-wangsir/p/13028040.html