Ant Design StyleAnt Design Style
快速上手
最佳实践
API
更新日志
⌘ K

Table of Contents

在 Next.js 中集成
Page Router
App Router
与 dumi 集成
1. 全局 Layout 中包裹 StyledProvider
2. 使用 extractStaticStyle 方法提取样式到独立文件
相关 API
基础知识
简介
CSS in JS 快速入门
CSS in JS 写法对比
设计理念与实施策略
快速上手
书写样式
切换主题
自定义主题
进阶使用
Babel 插件
SSR 集成
组件研发
集成 styled
🚧 stylish 复合样式
CSSinJS 样式库性能对比
从 Less 迁移
Less 应用自动化迁移
Less 应用手动迁移
Less 组件迁移
🚧 CSSinJS 与 Less 的编译差异
上一篇
Babel 插件
下一篇
组件研发

相关资源

Ant Design
Ant Design Pro
Ant Design Pro Components
Umi-React 应用开发框架
Dumi-组件/文档研发工具
qiankun-微前端框架

社区

Medium
Twitter
yuqueAnt Design 语雀专栏
Ant Design 知乎专栏
体验科技专栏
seeconfSEE Conf-SEE Conf-蚂蚁体验科技大会

帮助

GitHub
更新日志
讨论

more products更多产品

yuque语雀-知识创作与分享工具
AntVAntV-数据可视化解决方案
EggEgg-企业级 Node.js 框架
kitchenKitchen-Sketch 工具集
xtech蚂蚁体验科技
Copyright © 2022-2024
Made with ❤️ by 蚂蚁集团 - AFX & 数字科技
‌
‌
‌
‌

集成 SSR

SSR(Server-side rendering)是指在服务器端将动态生成的 HTML 直接输出到浏览器,以提高页面的首次加载速度和 SEO 优化。 antd-style 针对 SSR 场景提供了专门的方法,将 antd 组件与 antd-style 样式做静态抽取,从而提高页面的渲染速度和性能。以下是在 SSR 中使用 antd-style 的指南:

在 Next.js 中集成

Page Router

在 Next.js 的服务端渲染中,需要在组件的 getInitialProps 方法中使用 extractStaticStyle 提取静态样式,并将其添加到页面的 head 中。 具体使用示例如下:

tsx

1. 引入并包裹 StyleProvider 组件,并将其包裹在需要提取静态样式的组件外层:

将 enhanceApp 参数传入 renderPage 方法。enhanceApp 是一个函数,用于对 App 组件进行增强,这里我们将 App 组件包裹在 StyleProvider 组件中,以便提取静态样式。

tsx

其中,cache 字段挂载的是 @ant-design/cssinjs 的 cache 对象。

2. 使用 extractStaticStyle 方法提取静态样式

调用 renderPage 方法得到渲染后的页面内容,并使用 extractStaticStyle 方法提取出其中的静态样式。

tsx

extractStaticStyle 方法抽取后的样式是一个数组,包含了 antd 的样式对象与 antd-style 的样式对象。每项样式对象的结构如下:

属性名称类型描述
keystring键值,antd 样式 key 为 antd,antd-style 的样式 key 默认为 acss
styleJSX.Element样式元素,使用 JSX.Element 类型表示
cssstring样式对应的 CSS 字符串
idsstring[]样式应用的元素 ID 数组
tagstring带有 <style> 标签的 css 字符串

3. 将提取出的样式添加到页面的 head 中

由于 Nextjs 中需要直接插入 <style> 样式元素,我们从 extractStaticStyle 获得的样式对象数组中,取出 style 样式元素,将其添加到页面的 head 中即可。

tsx

App Router

INFO

需要 antd-style v3.5.0 以上版本

App Router 是 Next.js 在 13.4 版本中正式完备的应用模式。 antd-style 也支持了这种模式。 接入方式如下:

创建一个 StyleRegistry.tsx 组件,用于收集提取静态样式并插入到 html 中:

tsx

在 app/layout.tsx 中引入该组件:

tsx
WARNING

由于 Next.js 的 App Router 缺少获取 html 的钩子, extractStaticStyle 无法分析出当前应用中使用的样式,相当于没有 TreeShaking 能力,因此 App Router 引入的样式体积会比 Page Router 大一些。

与 dumi 集成

在本示例中,将抽取样式到 css 静态文件,然后在 html 中引入。

1. 全局 Layout 中包裹 StyledProvider

在 umi 的全局 Layout 中包裹 StyledProvider,并定义一个全局的 cache 变量,用于缓存 antd 的样式:

tsx

2. 使用 extractStaticStyle 方法提取样式到独立文件

在服务端渲染的相关文件中(例如 plugin.ts ), 使用 extractStaticStyle 方法提取样式到独立文件:

ts
参考示例

dumi-theme-antd-style:https://github.com/arvinxx/dumi-theme-antd-style/blob/master/src/plugin/index.ts

相关 API

extractStaticStyle