热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端初学者的AntDesignProV6总结(上)

前端初学者的AntDesignProV6总结(上)一、UI组件开发流程(){}通用(异步)函数useEmotionCs


前端初学者的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

image-20230118191910951


二、默认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 ? <>:

{user.username}
}
);
}

性能优化

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

// src/components/CounterActions/index.tsx
import { useModel } from &#39;umi&#39;;

export default () &#61;> {
const { add, minus } &#61; useModel(&#39;counterModel&#39;, (model) &#61;> ({
add: model.increment,
minus: model.decrement,
}));

return (





);
};

InitialState

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

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

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

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

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

在组件的其他区域可以使用initialState&#xff0c;使用方式如下

const { initialState, setInitialState } &#61; useModel(&#39;&#64;&#64;initialState&#39;);
const fetchUserInfo &#61; async () &#61;> {
const userInfo &#61; await initialState?.fetchUserInfo?.();
if (userInfo) {
flushSync(() &#61;> {
setInitialState((s) &#61;> ({
...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&#xff0c;关于token可参考

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

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

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

我觉得没什么好配置的。


七、配置文件

需要修改的几个配置

defaultSetting.ts

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

八、路由配置


添加页面



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


有两种方式


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

九、Umi微生成器



参考文档&#xff1a;https://umijs.org/docs/guides/generator


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


生成页面

以目录方式生成页面&#xff0c;目录下为页面的组件和样式文件&#xff1a;

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

编辑页面模板

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


生成DVA

为项目开启 Dva 配置&#xff0c;命令执行后&#xff0c;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






推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了如何使用elementui分页组件进行分页功能的改写,只需一行代码即可调用。通过封装分页组件,避免在每个页面都写跳转请求的重复代码。详细的代码示例和使用方法在正文中给出。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有