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

前端初学者的Ant Design Pro V6总结(上)
前端初学者的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 ? <></>: <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
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Ant Design 是一个很流行的 UI 设计语言React 组件库。但是,它也有一些缺点,包括: 1. 包体积较大:Ant Design 的包体积较大,如果只是为了使用几个组件,使用它可能会带来较大的代价。 2. 使用学习曲线较陡:Ant Design 的 API 设计较复杂,对于新手来说,学习曲线可能较陡。 3. 个性化能力较差:Ant Design 的组件和样式都是按照它的设计理念来实现的,如果想要对组件进行大量的定制和修改,可能会受到一定的限制。 4. 升级频繁:Ant Design 经常更新和升级,如果你的项目使用的是旧版本的 Ant Design,那么在升级到新版本时可能需要花费一定的时间来调整代码。 希望这些信息对你有帮助。 ### 回答2: Ant Design 是一款流行的前端 UI 库,提供了丰富的组件和样式供开发者使用。尽管 Ant Design 有很多优点,但也存在一些缺点。 首先,Ant Design 的样式风格比较统一,这在一些特定的项目中可能会显得过于相似。某些开发者可能希望为自己的项目选择不同的风格,但在 Ant Design 中这很难实现。这意味着在定制化需求较高的项目中,可能需要耗费更多的时间和精力来调整样式。 其次,Ant Design 的组件库非常庞大,其中包含了大量的组件和功能。尽管这是一个优点,但对于新手来说可能会感到压倒性。学习和理解如此庞大的组件库需要花费相当长的时间。对于一些小型项目或者只需要使用一两个组件的开发者来说,Ant Design 的规模可能过于庞大,不太适合他们的需求。 此外,Ant Design 的文档和示例相对较少。在初学阶段,开发者通常依赖文档来学习和使用一个新的技术或库。Ant Design 的文档并不是很详细,不够清晰地解释每个组件的用法和特性。开发者可能需要花费更多的时间在官方文档以外寻找其他资源来弥补这一不足。 总结来说,尽管 Ant Design 是一款功能强大的 UI 库,但它也存在一些缺点。样式风格统一、组件库庞大且不易定制、文档不够详细是其中的三个主要缺点。开发者在选择是否使用 Ant Design 时需要根据自己的项目需求综合考虑。 ### 回答3: Ant Design 是一个广泛使用的UI框架,拥有很多出色的特点和优势。然而,它也存在一些缺点需要考虑。 首先,Ant Design 是一个相对庞大的框架,它的文件大小相对较大。这可能导致网页加载速度变慢,特别是对于访问速度较慢的用户来说。对于那些对页面性能要求非常高的项目,这可能是一个问题。 其次,Ant Design 的学习曲线可能相对陡峭。用户需要熟悉 Ant Design 的各种组件、API 和样式系统,才能发挥其最大的潜力。对于新手来说,这可能需要一些时间和精力来掌握。 此外,Ant Design 的定制化选项相对有限。虽然 Ant Design 提供了一些自定义主题的能力,但对于一些特殊需求的项目来说,可能还需要额外的定制。在这种情况下,可能需要花费更多的时间和资源来适应项目需求。 最后,Ant Design 的文档和社区支持相对较好,但仍然可能存在一些问题或疑惑没有得到及时解决。对于一些特殊场景或较新的功能,可能需要自行探索或依赖开发者社区的支持。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值