学习了一个月的js+react. 掌握了基本的react使用,准备用react搭建一套后台管理页面,期间穿插着后台的搭建,前后端并行开发。
技术选型
项目地址.
ts+react16.8+umi3+dva+antd4.x
前端路由分类
项目搭建
- 用umi创建项目
npm create @umijs/umi-app
-
目录结构
-
采用umi约定式路由,删 修改
.umirc.ts
中配置文件,删除routes
属性 -
基于
umi-request
封装网络工具类
import { extend } from 'umi-request';
import { notification, message } from 'antd';
type Msg = {
[key:number] :string
}
const codeMessage:Msg = {
200: '服务器成功返回请求的数据。',
201: '新建或修改数据成功。',
202: '一个请求已经进入后台排队(异步任务)。',
204: '删除数据成功。',
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
401: '用户没有权限(令牌、用户名、密码错误)。',
403: '用户得到授权,但是访问是被禁止的。',
404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
406: '请求的格式不可得。',
410: '请求的资源被永久删除,且不会再得到的。',
422: '当创建一个对象时,发生一个验证错误。',
500: '服务器发生错误,请检查服务器。',
502: '网关错误。',
503: '服务不可用,服务器暂时过载或维护。',
504: '网关超时。',
};
const errorHandler = (error: { response:Response }) : Response=>{
const {response} = error;
if (response && response.status) {
const errorText = codeMessage[response.status] || response.statusText;
const { status, url } = response;
notification.error({
message: `请求错误 ${status}: ${url}`,
description: errorText,
});
} else if (!response) {
notification.error({
description: '您的网络发生异常,无法连接服务器',
message: '网络异常',
});
}
return response || {};
}
const request = extend({
prefix:"http://localhost:8080/",
timeout:2000,
headers:{
'Content-Type': 'application/json;charset=UTF-8'
},
errorHandler
})
export default request;
- 编写model类
这里要注意的,第一次创建项目之后,import {Reducer,Effect,Subscription} from 'umi'
一直飘红,表示在umi中找不到这些组件,原因是因为没有export default model .需要export 之后 npm install 之后,umi会把dva导入进来,非常坑
- service 编写
- index 的编写
- 类型的定义, ts里不像js随便乱写,ts有自己的类型定义,定义在data.d.ts 里面
- 使用mock数据测试登陆功能 / mock 目录下创建 api.ts文件
- 修改登录逻辑