前端初学者的Ant Design Pro V6总结(上)

一、UI组件开发流程

  1. () => {} 通用(异步)函数
  2. useEmotionCss 定义CSS
  3. useModel获取全局状态
  4. useCallback 处理React合成事件
  5. JSX 拆分组件
  6. initiateState 中CurrentUser空值处理
  7. initiateState 中其他值的空值处理
  8. 定义JSX中所使用的配置信息
  9. return JSX

二、默认Footer

参考资料:https://procomponents.ant.design/components/layout/#footer

可用于简易Footer,antd pro默认Footer

三、Mock

参考资料:https://umijs.org/docs/guides/mock

Umi 约定 /mock 目录下的所有文件为 Mock 文件,例如这样的目录结构:

.
├── mock├── todos.ts├── items.ts└── users.ts
└── src└── pages└── index.tsx

目前支持两种方式

字面量函数

export default {'/api/users': [{ id: 1, name: 'foo' },{ id: 2, name: 'bar' }],'/api/users/1': { id: 1, name: 'foo' },
}

可以使用defineMock帮助声明mock

export default defineMock({"/api/users": [{ id: 1, name: "foo" },{ id: 2, name: "bar" },],"/api/users/1": { id: 1, name: "foo" },"GET /api/users/2": (req, res) => {res.status(200).json({ id: 2, name: "bar" });},
});

自定义函数

export default {'POST /api/users/create': (req, res) => {// 添加跨域请求头res.setHeader('Access-Control-Allow-Origin', '*');res.end('ok');}
}

关闭Mock

配置方式

// .umirc.ts
export default {mock: false,
};

环境变量方式(package.json)

MOCK=none umi dev

四、国际化

国际化字符串处理流程

参考资料:https://umijs.org/docs/max/i18n#useintl

const intl = useIntl(); // 国际化
const defaultMessage = intl.formatMessage({id: 'app.copyright.produced',defaultMessage: '蚂蚁集团体验技术部出品',
});

字符串定义

在locales > zh-CN / zh-CN 定义常量

五、基于Hooks的简易数据流

参考资料:https://umijs.org/docs/max/data-flow

antd pro v6使用useModel + useRequest管理简易数据流。

数据流插件将数据流分为Model(stoore、action)、useMode、useRequestl(处理副作用)配置使用达到数据流管理的目的。

定义Model

  1. Model采用约定式目录结构,约定在src/modelssrc/pages/xxxx/models/
  2. Model即命名空间,它可以划分数据流,src/models/count.ts命名空间即count,src/pages/pageA/model.ts命名空间即pageA.model。
  3. src/models 目录下不支持目录嵌套定义 model
  4. pages/xxx/models 下 model 定义支持嵌套定义
  5. Model就是个自定义Hooks,它需要一个默认导出的函数
  6. Model中可以使用useState,useEffect等其他的Hooks
// src/models/userModel.ts
import { useState } from 'react';
import { getUser } from '@/services/user';export default () => {const [user, setUser] = useState({});const [loading, setLoading] = useState(true);useEffect(() => {getUser().then((res) => {setUser(res);setLoading(false);});}, []);return {user,loading,};
};
  1. 可以利用aHooks中的useRequest简化请求流程
// src/models/userModel.ts
import { useRequest } from 'ahooks';
import { getUser } from '@/services/user';export default () => {const { data: user, loading: loading } = useRequest(async () => {const res = await getUser();if (res) {return res;}return {};});return {user,loading,};
};

使用Model

// src/components/Username/index.tsx
import { useModel } from 'umi';export default () => {const { user, loading } = useModel('userModel');return ({loading ? <></>: <div>{user.username}</div>});
}

性能优化

使用useModel第二个参数回调中的model可以过滤不需要的参数,避免组件重复渲染。

// src/components/CounterActions/index.tsx
import { useModel } from 'umi';export default () => {const { add, minus } = useModel('counterModel', (model) => ({add: model.increment,minus: model.decrement,}));return (<div><button onClick={add}>add by 1</button><button onClick={minus}>minus by 1</button></div>);
};

InitialState

参考资料:https://pro.ant.design/zh-CN/config/runtime-api#getinitialstate

antd pro默认会创建一个初始数据InitialState。

app.tsx中的 getInitialState 会被umi自动执行,用于获取初始化数据,初始化数据可使用 useModel 在各个组件中作为简易数据流的一部分使用。

它包含如下所示的settings,currentUser,loading,fetchUserInfo,如有更多数据可自定添加TS类型声明

export async function getInitialState(): Promise<{settings?: Partial<LayoutSettings>; // 布局配置,不用管currentUser?: API.CurrentUser; // 当前用户loading?: boolean; // 是否加载完成,不用管fetchUserInfo?: () => Promise<API.CurrentUser | undefined>; // 获取用户信息
}> {}

在组件的其他区域可以使用initialState,使用方式如下

const { initialState, setInitialState } = useModel('@@initialState');
const fetchUserInfo = async () => {const userInfo = await initialState?.fetchUserInfo?.();if (userInfo) {flushSync(() => {setInitialState((s) => ({...s,currentUser: userInfo,}));});}};

关于其他useModel可参考antd pro和umi关于简易数据流的文档

https://pro.ant.design/zh-CN/docs/simple-model

https://v3.umijs.org/zh-CN/plugins/plugin-model

六、主题

config.defaultSetting.ts中可以配置配色方案和token,关于token可参考

https://ant.design/docs/react/customize-theme-cn#%E4%BD%BF%E7%94%A8-design-token

config.ts中的theme字段可以做进一步的配置

具体可以参考:https://umijs.org/docs/api/config#theme

我觉得没什么好配置的。

七、配置文件

需要修改的几个配置

defaultSetting.ts

title: 'RBAC权限系统',
logo: 'https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg',
token: {},
pwa: true,

八、路由配置

添加页面

参考文档:https://pro.ant.design/zh-CN/docs/new-page

有两种方式

  1. 在pages下新建Component,再在config.routes中注册页面
  2. 使用umi微生成器生成界面,再在config.routes中注册页面

九、Umi微生成器

参考文档:https://umijs.org/docs/guides/generator

Umi 中内置了众多微生成器,协助你在开发中快速的完成一些繁琐的工作。

生成页面

以目录方式生成页面,目录下为页面的组件和样式文件:

$umi g page bar --dir
Write: src/pages/bar/index.less
Write: src/pages/bar/index.tsx

编辑页面模板

由于Antd Deisign Pro V6默认使用All in js的方案,而生成器生成的代码使用less方案,建议修改默认的模版

生成DVA

为项目开启 Dva 配置,命令执行后,umi 会生成 Dva

$umi g dva
set config:dva on /Users/umi/umi-playground/.umirc.ts
set config:plugins on /Users/umi/umi-playground/.umirc.ts
info  - Update config file
info  - Write example model

前端初学者的Ant Design Pro V6总结(上)相关推荐

  1. 前端UI框架Ant Design Pro 依赖安装

    前端UI框架Ant Design Pro 依赖安装 最近换了新工作,需要负责全栈开发,项目用到的前端框架是ant design, 蚂蚁金服基于react打造的一个服务于企业级产品的UI框架, 这边简单 ...

  2. 前端UI框架Ant Design Pro

    一直忙于工作,也没时间总结.现在有点零散时间把之前做的笔记整理一下. 目前项目使用的技术栈是,前端UI框架Ant Design Pro,数据交互使用react,后端使用的是springcloud,离线 ...

  3. Ant Design Pro 使用自定义iconfont图标,改变导航栏的图标

    Ant Design Pro 使用iconfont上的图标有两种方法: 1.加载在线图标 创建一个项目(图标的前缀一定要设置为:icon-) 创建远程连接 复制代码,找到ant design pro项 ...

  4. 【前端】Ant Design Pro和Arco Design Pro非技术对比

    最近公司要从Ant Design Pro和Arco Design Pro中选择一个作为中后台前端,非技术简单对比一下 stars数量 图片地址 中后台前端效果 Ant Design Pro Arco ...

  5. 使用Ant Design Pro,一个企业级开箱即用的中后台前端

    #目录 ** 此文仅是个人自学理解的学习笔记,若有不对之处敬请指导更正,谢谢! ** 文章目录 @[toc] Ant Design Pro 了解 知识储备 安装使用 方法一:clone 实践 ESli ...

  6. ant design pro v4 从后台服务器请求菜单,思路,具体代码及坑

    原文见:https://www.yuque.com/asuncat/htn2dd/wgnx0u 版本信息 ant design pro : v4.2.2 umi: v3.2.14 pro-layout ...

  7. ant design pro模板_Ant Design Pro 学习笔记

    学习笔记 摘要介绍 Ant Design Pro 是一个基于Ant Design搭建起来的模板项目.它提供了两个主要布局:BasicLayout.UserLayout,在布局基础上制作了20多个基础页 ...

  8. Ant Design Pro 网络请求流程

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 在 Ant Design Pro 中,一个完整的前端 UI 交互到服务端处理流程是这样的: UI 组件交互操作 ...

  9. ant design pro (八)构建和发布

    一.概述 原文地址:https://pro.ant.design/docs/deploy-cn 二.详细 2.1.构建 当项目开发完毕,只需要运行一行命令就可以打包你的应用: npm run buil ...

最新文章

  1. sgSpeedMode.js判断360浏览器是“兼容模式”,提示使用“极速模式”
  2. 浅析机器视觉在安防行业的应用
  3. mysql 多实例应用配置部署指南
  4. python 日志分析_python 日志分析统计脚本 | 学步园
  5. python gis 经纬度 库_入门-Python-GIS坐标转换
  6. 1013 数素数 (20 分)(c语言)
  7. fitbit手表中文说明书_如何获取和分析Fitbit睡眠分数
  8. python常见内置函数
  9. Windows编程之使用外部动态链接库——纸牌
  10. 信息学奥赛一本通(1259:【例9.3】求最长不下降序列)
  11. 厉害插件_2个相见恨晚的浏览器插件,让你的工作效率提升100%
  12. 解决SSH项目乱码问题的环境配置方案
  13. 交际过程的两个基本环节_要客品味 | 人际交往礼仪——交际礼仪的基本原则
  14. 机器学习教程 - 分步指南
  15. 中企动力助天正生物争夺破伤风抗毒素全球话语权
  16. 击鼓传花c语言编程题,转身之间——此间的少年画蛇添足版
  17. 基于拉格朗日差值算法的BMP图像缩放
  18. LSTM中对time step的理解
  19. Ubuntu系统安装搜狗(sougou for linux)输入法
  20. 如何用人工智能预测股票(完整答案)

热门文章

  1. 【漆学军】EA编程速成教程(5)增加一个下单条件:抛物线指标
  2. 一款轻量级Linux工具箱
  3. 阿里云服务器数据盘是什么?系统盘和数据盘区别
  4. Windows系统任务栏应用图标显示成白色方块解决办法
  5. SSL 2291——分组背包
  6. 这绝对是程序员被黑的最惨的一次,被老婆带了无数顶帽子!
  7. 如何设计薪酬制度才能达到最大的激励效果?
  8. Unity传福音者如何使创作者成功
  9. 互链年报 | 2019全球监管层出台600余区块链政策:中国重在扶持 美国多是监管...
  10. 阐述Web Services的应用场景