Ant Design 5.0 正式发布


Ant Design 5.0 已在上周正式发布。

Ant Design 开发团队表示,同上一个大版本发布一样,他们将会把 v4 从主分支切换至 4.x-stable 分支进入维护状态。v4 将会继续维护 1 年时间,仍然会对 Bug 发布 Patch,但是此后不再接收新的 Feature Request。截止日期为 2023 年年底。原 v4 官网迁移至 https://4x.ant.design/。

下面的重要更新内容摘录自 发布文档


设计升级

设计方面,我们根据自身业务实践和社区呼声,增加了 4 类新组件和 4+ 变体组件, 这些组件都经过严谨的推敲,确保了其通用性和扩展性,希望它们为你带来良好的使用体验。同时,我们将内部使用很久的一些重型资产开放出来,帮助大家服务更多的业务场景。

另外在默认样式方面,我们对组件进行全面升级。秉持快乐工作的内核,我们从「更聚焦」、「去干扰」、「轻松感」三个方向对系统视觉进行了升级。其中涉及到主色、圆角、文字色阶、交互反馈等多个全局样式的优化和调整,另外我们还对导航框架和几乎所有组件做了去线化处理。这些改变,除了能带给你焕然一新的感觉,在具体使用过程中,也更加易用。当然,如果你对样式主题有不一样的审美和诉求,在 5.0 当中,你可以轻易根据我们提供的样式算法和配置工具,一键定制属于你自己的主题。

最后,我们始终以人为本,正在试验名叫「快乐工作」的主题包,内含情感增强特色组件,用户在特定场景使用时,会有丰富但克制的动画,为用户带来一点“快乐感”。我们希望这是一个开始,呼吁行业设计多关注企业级产品,为冰冷的企业级产品注入更多的情感去关怀我们的用户。快乐工作主题包将在发布会后推出,敬请期待~

全新 Design Token 模型

在 v4 版本中,我们提出更多的 less 变量以支持主题定制能力。然而除了色板支持完全的派生能力外,其他如字体、行高、间距都没有对应的算法。在 v5 中,我们改造了所有的 Token,使其基于 Seed + Algorithm 可以派生出所有的 Design Token。全新的 Design Token 模型支持多算法 Pipeline,从而大大降低开发者拓展成本。你可以选择一个现成的算法,再加自己的拓展部分算法(当然你也可以写一套完整的算法),就可以生成一套完整的 Design Token:

CSS-in-JS 动态主题

过去我们尝试通过 CSS Variables 提供动态主题能力。在经过一段时间的探索后,我们发现随着设计系统的复杂度提升,其中间变量的维护成本就会变得不可忽略。因而在 v4 时期,CSS Variables 停留在了动态主题色而没有进一步提供暗色、其他 Token 的动态能力。到了 v5,随着灵活性的需求呼之欲出,我们不得不再次面对动态主题的问题。

在 v5 启动伊始,我们花了几个月的时间对比当下流行的动态主题方案:CSS Variables 与 CSS-in-JS。CSS-in-JS 不需要维护中间变量,但是有更多的运行时消耗(如果你对此不太熟悉,欢迎阅读 Why We're Breaking Up with CSS-in-JS)。从维护成本而言,我们更倾向于后者,但是我们并不希望因此而损害用户体验。因而在经过一系列尝试后,我们研发了一套针对组件级别的 CSS-in-JS 库 @ant-design/cssinjs。它通过牺牲动态性来获取更高的缓存效率,从而减少运行时的性能损耗。

通过动态主题能力,你通过 ConfigProvider 可以任意调整、嵌套主题:

<ConfigProvider theme={{ token: { colorPrimary: 'red' }}}>
<ConfigProvider theme={{ token: { colorPrimary: 'blue' }}}>
<MyApp />
</ConfigProvider>
</ConfigProvider>

甚至可以针对某一个组件进行调整:

<ConfigProvider theme={{
components: {
Button: { colorText: 'red' },
},
}}>
<MyApp />
</ConfigProvider>

代码示例太乏味?你可以直接在我们的首页体验示例:

新的 CSS-in-JS 方案原生支持 Tree Shaking,在 v5 你不在需要使用 babel-plugin-import 摘除未使用到的样式。新的方案将自动按需加载样式。

更多组件

新增 FloatButton 组件用于网站上的全局功能,原 BackTop 将收为其子组件:

新增 Tour 组件用于引导用户了解产品功能:

此外,我们还提供了一些组件的变体用于内联使用:

兼容性调整

浏览器最低版本调整

今年 6 月 IE 宣布停止维护,因此 Ant Design v5 兼容性调整从 IE 11 提升至 Edge,其余现代浏览器不变。IE 兼容性样式代码将全部移除。至此,我们可以通过 CSS Logical Properties 将 RTL 与 LTR 样式合并,进一步减少维护成本。

默认 Day.js 代替 Moment.js

Moment.js 在 2020 年转为 Legacy Project。考虑到切换日期库会导致 Break Change,我们在 v4 时期选择继续使用 Moment.js 直至 v4 结束。到了 v5,我们切换为更轻量级的 Day.js。Day.js 除了包体积更小之外,也带来了 immutable 能力。

当然,如果你希望项目升级后仍然使用 Moment.js,可以通过 @ant-design/moment-webpack-plugin 插件进行替换。

API 非 Break 调整

Ant Design 在 7 年的研发过程中,部分 API 出现分叉的情况。这导致开发者有额外的记忆成本,同时也使得我们新增 API 时也难以选择。原本我们计划对一系列 API 进行整理合并,同 v3 升级 v4 一样在当前版本提示开发者迁移 API,并在 v5 移除废弃 API。但是在经过社区交流之后,我们决定改变计划为:每个大版本只会调整少量 API,并且原废弃 API 在新版本中会继续兼容,推迟到下下个大版本移除。这次我们改动以下部分,并且 v5 会全部兼容原来写法:

  • 弹层类组件 openvisible 统一至 open 以符合 HTML Spec
  • dropdownClassNamepopupClassName 统一至 popupClassName 以更符合语义。
  • 结构语法糖(例如 <Select.Option />)使用数据驱动代替,以为性能优化做准备。
  • 废弃静态方法(例如 Message.error),推荐应用层封装以支持 React 18 concurrent 模式。

组件移除

v5 将会移除 Comment 组件 与 PageHeader 组件,BackTop 将会成为 FloatButton 子组件。由于 Comment 组件本身除样式外并未提供实际能力,开发者仍然需要额外工作来实现评论功能。此外由于实际使用场景不多,我们决定从 v5 中移除,但是你仍然可以在兼容包中找到它。PageHeader 组件同样需要一定的开发工作来使其工作,因而我们将其挪至 ProComponents 中,与 ProLayout 一同使用从而提供真正的交互能力。

如何升级

如 兼容性调整 所述,由于 v5 不会对 API 做 Break Change,因而你可以尝试通过我们的 codemod 工具进行迁移。对于 Moment.js 可以使用我们提供的 @ant-design/moment-webpack-plugin 插件进行替换。如果你的项目依赖了 antd 的 less 文件,请参考我们的迁移文档通过 less-loader 进行兼容。详细文档请点击此处查阅。

未来规划

未来我们计划提供更多的组件,有些已经排上议程,例如 WaterMark、QrCode、ColorPicker。而针对 Table 性能的热烈呼声我们已经听到,计划为展示态提供虚拟滚动能力,其将会原生支持固定列能力。此外,由于在 v4 中,我们已经收敛结构语法糖至数据驱动属性中,我们有了更好的机会对性能做优化,包括不仅限于 Menu、Table、Steps、Collapse、Tabs、Dropdown 等等。

设计侧,我们将会更新官方站点提供更多组件级别的设计指引,这将会由设计团队持续更新。过去我们在中文社区写了不少文章,我们希望也趁此机会将文章提供英文版本,让国际开发者、设计师可以共同阅读。让我们拭目以待。

完整 Changelog:https://ant.design/changelog-cn


相關推薦

2022-12-13

Ant Design 5.0.6 现已发布,此版本主要修复了 5.0 版本的一些 Bug ,变化如下: 修复 FloatButton 的 toolip 属性不支持设置为 0 的问题。#39425 修复 Space 组件包裹的 Select 系列组件在 hover 时清除图标不展示的问题。#39468 修复 Cascader

2022-11-29

Ant Design 5.0.2 现已发布,主要修复了 5.0 版本的一些 Bug ,变化如下: 修复 Card 组件设置 bodyStyle 的背景颜色后圆角失效的问题。#38973 优化错误色的默认算法。#38933 修复 RTL 模式下的样式问题。#38829 Space.Compact Space.Compac

2022-08-28

ng-zorro-antd 是 Ant Design 的 Angular 实现,主要用于研发企业级中后台产品。全部代码开源并遵循 MIT 协议,任何企业、组织及个人均可免费使用。 ng-zorro-antd 14.0.0 正式发布,更新内容如下: 安装 ng-zorro-antd $ cd PROJECT-NAME $ ng add ng

2024-03-29

Ant Design Mobile v5.35.0 发布了。Ant Design Mobile 即 Ant Design 移动端设计规范,antd-mobile 是 Ant Design 的移动规范的 React 实现,服务于蚂蚁及口碑无线业务。 更新内容如下: 特性 PickerView: 添加激活态 className。#6427 MISC: 

2023-08-30

日「源创会」北京站,聊聊 AI 大模型与底层技术 >>> Ant Design Mobile v5.32.1 发布了。Ant Design Mobile 即 Ant Design 移动端设计规范,antd-mobile 是 Ant Design 的移动规范的 React 实现,服务于蚂蚁及口碑无线业务。 更新内容如下:

2023-09-04

Ant Design 5.8.6 现已发布,主要变化如下:   针对 CSSInJS 加载 styles 大小进行了优化。 Notification 和 Message 组件只有在展示时才会插入对应样式。#44488 剥离 Tag 状态与预设颜色样式,现在只有当使用的使用才会生

2022-04-19

Ant Design 4.20.0-alpha.1 现已发布,主要变化如下: Form 添加 useWatch 支持获取当前字段值。#35036 Image PreviewGroup 支持顶部进度渲染。#35038 Upload Upload picture-card 模式支持配置图片的 crossOrigin 属性。#34981 修复 Upload prefixCls 对

2022-05-01

Ant Design 4.20.1 现已发布,主要变化如下: 修复 Breadcrumb 多余的 padding 和 margin 样式。#35235 修复 Input.Search 在中文输入法下回车键触发 onSearch 的行为不一致的问题。#35164  修复 Upload 和 Upload.Dragger

2022-05-10

Ant Design 4.20.3 现已发布,主要变化如下: 增加 官方国内镜像,享受飞一般的加载速度。 修复 Row 里不必要的 rowGap: 0 样式属性。#35409 修复 List.Item ref 不生效的问题。#35321 优化 Tooltip 箭头的样式。#35401 修复 Table 筛

2022-05-31

Ant Design 4.20.7 现已发布,主要变化如下: 修复 Drawer 打开时 form 实例为 null 的问题。#35706 修复 Segmented 组件中选项使用 icon 属性时图标与文字之间的间距失效问题。#35701 优化 Popover 的箭头效果。#35717 TypeScript 修复 Card

2022-08-02

Ant Design 4.22.3 现已发布,主要变化如下:   🐞 修复在 React 18 版本中 Uploader 的 fileList 发生更新后出现闪烁的情况。#36801  🐞 修复 Form.Item 在垂直布局下使用小尺寸的 labelCol 和 wrapperCol 

2022-08-28

Ant Design 4.22.8 现已发布,主要变化如下: Table Table 组件添加缺失的 filterCheckAll 法语本地化。#37246 优化 Table 排序功能的无障碍体验。#37167 优化 Popconfirm 组件按钮间距。#37183 去除 Card 重复的 less 样式属性定义。#37170

2022-09-18

Ant Design 4.23.2 现已发布,主要变化如下: 修复 Card 传入 tabList 属性时控制台出现废弃警告的问题。#37537 修复 Table filterMode="tree" 时 filterSearch 函数未执行的问题。#37587 修复 Tooltip 的子元素 className 非 string 类型时会被覆盖的

2022-11-19

Ant Design 4.24.2 现已发布,主要变化如下: 修复 Typography 设置 prefixCls 不生效的问题。#38586  🐞 修复 Table 在筛选菜单里按回车时会触发排序的问题。#38585 🆕 Modal 允许透传 mousePosition 来控制弹框动画原点。#38584  🐞