ant design pro (七)和服务端进行交互

摘要:
下面将简单介绍和服务端交互的基本写法。

一、概述

原文地址:https://pro.ant.design/docs/server-cn

Ant Design Pro 是一套基于 React 技术栈的单页面应用,我们提供的是前端代码和本地模拟数据的开发模式, 通过 Restful API 的形式和任何技术栈的服务端应用一起工作。下面将简单介绍和服务端交互的基本写法。

二、详细介绍

2.1、前端请求流程

在 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

// models/user.js
import { queryCurrent } from '../services/user';
...
effects: {
  *fetch({ payload }, { call, put }) {
    ...
    const response = yield call(queryUsers);
    ...
  },
}

2.2、Effect 处理异步请求

在处理复杂的异步请求的时候,很容易让逻辑混乱,陷入嵌套陷阱,所以 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,
    });
  },
},

通过generatoryield使得异步调用的逻辑处理跟同步一样,更多可参看dva async logic

2.3、从 mock 直接切换到服务端请求

通常来讲只要 mock 的接口和真实的服务端接口保持一致,那么只需要重定向 mock 到对应的服务端接口即可。

// .roadhogrc.mock.js
export default {
  'GET /api/(.*)': 'https://your.server.com/api/',
};

这样你浏览器里这样的接口http://localhost:8001/api/applications会被反向代理到https://your.server.com/api/applications下。

2.3.1、关闭 mock

关闭 mock 的方法我们推荐采用环境变量,你可以在package.json中设置:

"script" : {
  "start": "roadhog server",
  "start:no-proxy": "cross-env NO_PROXY=true roadhog server"
}

然后在.roadhogrc.mock.js中做个判断即可:

const noProxy = process.env.NO_PROXY === 'true';
...
export default noProxy ? {} : delay(proxy, 1000);

.

免责声明:文章转载自《ant design pro (七)和服务端进行交互》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux动态频率调节系统CPUFreq之三:governorpython 下载安装setuptools及pip应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mock的使用及取消,node模仿本地请求:为了解决前后端分离,用户后台没写完接口的情况下

借鉴:https://www.jianshu.com/p/dd23a6547114 1、说到这里还有一种是配置node模拟本地请求 (1)node模拟本地请求: 补充一下 【1】首先在根目录下建一个data.json,用来存放一些返回数据,名字随便取好了 [2]在webpack.dev.conf.js文件里 在这个const portfinder...

utittest和pytest中mock的使用详细介绍

头号玩家 模拟世界 单元测试库介绍 mock Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。python3.3 以前,mock是第三方库,需要安装之后才能使用。python3.3之后,mock作为标准库内置到 unittest。 unittest: unittest是Py...

【mockito】单元测试之mockito简单使用

背景 项目使用的是springmvc+mybatis 开发; mock包为mockito-all;虽然也引用了powermock,但截至目前,还未使用到;如果使用到后续再补相关笔记。 mock,个人理解,有两个场景比较常见吧。一个是在项目初期接口定义好后没有实现逻辑阶段;另一个就是针对已经有的逻辑自测阶段,而又不想(或者依赖的别人接口不想关心)被别人所左右...

GoMock框架使用指南

序言 要写出好的测试代码,必须精通相关的测试框架。对于Golang的程序员来说,至少需要掌握下面四个测试框架: GoConvey GoStub GoMock Monkey 读者通过前面三篇文章的学习可以对框架GoConvey和GoStub优雅的组合使用了,本文将接着介绍第三个框架GoMock的使用方法,目的是使得读者掌握框架GoConvey + Go...

mockito使用

mockito学习资料: http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html http://blog.csdn.net/sdyy321/article/details/38757135 ​ 1、验证行为是否发生 1 2 3 4 5 6 7 8 @Test public vo...

JAVA的mock工具mockito简介

在测试过程中,难免会碰到交互的外围系统不给力的情况,这时候mock就派上用场了,前段时间跟同学聊到这块的时候,他向我推荐mockito这个mock工具,试用了一下,确实很好用,这里给大家介绍下这款工具: 1、mockito的特点 它既能mock接口也能mock实体类(咱测试框架mock工具也能做到) 简单的注解语法-@Mock 简单易懂,语法简单 支持顺...