zoukankan      html  css  js  c++  java
  • Ant Design Pro 中的服务端交互

    前端请求流程

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

    1. UI 组件交互操作;

    2. 调用 model 的 effect;

    3. 调用统一管理的 service 请求函数;

    4. 使用封装的 request.js 发送请求;

    5. 获取服务端返回;

    6. 然后调用 reducer 改变 state;

    7. 更新 model

     统一的请求处理都放在 services 文件夹中,并且一般按照 model 维度进行拆分文件

    services/
      user.js
      api.js
      ...

    其中,utils/request.js 是基于 fetch 的封装,便于统一处理 POST,GET 等请求参数,请求头,以及错误提示信息等。具体可以参看 request.js

    例如在 services 中的一个请求用户信息的例子:

    // services/user.js
    import request from '../utils/request';
    
    export async function query() {
      return request('/api/users');
    }
    
    export async function queryCurrent() {
      return request('/api/currentUser');
    }
    
    // models/user.js
    import { queryCurrent } from '../services/user';
    ...
    effects: {
      *fetch({ payload }, { call, put }) {
        ...
        const response = yield call(queryCurrent);
        ...
      },
    }

    处理异步请求

    在处理复杂的异步请求的时候,很容易让逻辑混乱,陷入嵌套陷阱,所以 Ant Design Pro 的底层基础框架 dva 使用 effect 的方式来管理同步化异步请求:

    effects: {
      *fetch({ payload }, { call, put }) {
        yield put({
          type: 'changeLoading',
          payload: true,
        });
        // 异步请求 1
        const response = yield call(queryFakeList, payload);
        yield put({
          type: 'save',
          payload: response,
        });
        // 异步请求 2
        const response2 = yield call(queryFakeList2, payload);
        yield put({
          type: 'save2',
          payload: response2,
        });
        yield put({
          type: 'changeLoading',
          payload: false,
        });
      },
    },
    nhz94259@163.com
  • 相关阅读:
    去掉返回数据存在HTML节点问题
    ios8 地图不能定位问题的解决办法
    日期选择器
    定位的系统实现简单方法
    NSMutableString 的使用例子
    UIImagePickerController--------图片选取器
    代码中判断网络类型的类别
    Gitbook Android App
    Ionic 整合 pixi.js
    ionic app调试问题
  • 原文地址:https://www.cnblogs.com/nhz-M/p/10624984.html
Copyright © 2011-2022 走看看