• 关于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  }




  • 相关阅读:
    在同一iphone项目添加lite版
    加权平均资本成本【读书笔记】
    强制iphone界面马上旋转
    市场营销经典《引爆点》简摘
    操作系统与固件,驱动是什么
    如何使用单元测试测试线程安全
    20192428魏来 《网络与系统系统攻防技术》实验四 恶意代码分析
    计网复习 https的加密过程
    jdk8下载安装与环境变量配置
    panic: qtls.ConnectionState not compatible with tls.ConnectionState
  • 原文地址:https://www.cnblogs.com/jack-wangsir/p/13028040.html
Copyright © 2020-2023  润新知