热门标签 | 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






推荐阅读
  • 如何在 Node.js 环境中将 CSV 数据转换为标准的 JSON 文件格式? ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 本文详细介绍了 jQuery 的入门知识与实战应用,首先讲解了如何引入 jQuery 库及入口函数的使用方法,为初学者提供了清晰的操作指南。此外,还深入探讨了 jQuery 在实际项目中的多种应用场景,包括 DOM 操作、事件处理和 AJAX 请求等,帮助读者全面掌握 jQuery 的核心功能与技巧。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • jQuery插件验证与屏幕键盘功能的集成解决方案
    本文介绍了一种集成了验证功能和屏幕键盘的jQuery插件解决方案。该插件不仅提供了强大的表单验证功能,还引入了一个高度可定制的屏幕键盘,以增强用户体验。通过这一集成方案,开发者可以轻松实现复杂的表单验证逻辑,并为用户提供便捷的输入方式,特别适用于移动设备或特殊输入场景。 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 在Python网络编程中,多线程技术的应用与优化是提升系统性能的关键。线程作为操作系统调度的基本单位,其主要功能是在进程内共享内存空间和资源,实现并行处理任务。当一个进程启动时,操作系统会为其分配内存空间,加载必要的资源和数据,并调度CPU进行执行。每个进程都拥有独立的地址空间,而线程则在此基础上进一步细化了任务的并行处理能力。通过合理设计和优化多线程程序,可以显著提高网络应用的响应速度和处理效率。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
  • 解决 Fetch 请求扇贝 API 时遇到的跨域问题及优化方案 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 《精通 jQuery》第六章:深入解析与实战应用
    《精通 jQuery》第六章:深入解析与实战应用本章详细探讨了 Ajax 技术的核心机制及其实际应用。Ajax 通过 XMLHttpRequest 对象实现客户端与服务器之间的异步数据交换,从而在不重新加载整个页面的情况下更新部分内容。这种技术不仅提升了用户体验,还提高了应用的响应速度和效率。此外,本章还介绍了如何利用 jQuery 简化 Ajax 操作,并提供了多个实战案例,帮助读者更好地理解和掌握这一重要技术。 ... [详细]
  • 优化升级版数据采集与赋值方法,专为前文内容设计
    在前一篇文章中,方法的局限性主要体现在需要传递参数,并且参数数量受限。当页面布局与所需参数不匹配时,该方法将无法正常工作。为此,我们推出了优化升级版1.1,旨在解决这些问题并提高灵活性和适用性。 ... [详细]
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社区 版权所有