zoukankan      html  css  js  c++  java
  • 关于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  }




  • 相关阅读:
    ExtJs2.0学习系列(1)Ext.MessageBox
    PDF加水印
    ExtJs2.0学习系列(2)Ext.Panel
    负载均衡(续)
    位运算设置权限续(转)
    Excel导出问题解决方案(导出时前面的0自动被去掉)
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    位运算设置权限
    WCF开发实战系列一:创建第一个WCF服务
    通过SQL Server的位运算功能巧妙解决多选查询
  • 原文地址:https://www.cnblogs.com/jack-wangsir/p/13028040.html
Copyright © 2011-2022 走看看