包裹组件
提供重置样式和提供消费上下文的默认环境。
何时使用
- 提供可消费 React context 的
message.xxx、Modal.xxx、notification.xxx的静态方法,可以简化 useMessage 等方法需要手动植入contextHolder的问题。 - 提供基于
.ant-app的默认重置样式,解决原生元素没有 antd 规范样式的问题。
代码演示
- 基本用法 ·
basic - Hooks 配置 ·
config
如何使用
基础用法
App 组件通过 Context 提供上下文方法调用,因而 useApp 需要作为子组件才能使用,我们推荐在应用中顶层包裹 App。
import React from 'react';
import { App } from 'antd';
const MyPage: React.FC = () => {
const { message, notification, modal } = App.useApp();
message.success('Good!');
notification.info({ title: 'Good' });
modal.warning({ title: 'Good' });
// ....
// other message, notification, modal static function
return <div>Hello world</div>;
};
const MyApp: React.FC = () => (
<App>
<MyPage />
</App>
);
export default MyApp;
注意:App.useApp 必须在 App 之下方可使用。
与 ConfigProvider 先后顺序
App 组件只能在 ConfigProvider 之下才能使用 Design Token,如果需要使用其样式重置能力,则 ConfigProvider 与 App 组件必须成对出现。
<ConfigProvider theme={{ ... }}>
<App>
...
</App>
</ConfigProvider>
内嵌使用场景(如无必要,尽量不做嵌套)
<App>
<Space>
...
<App>...</App>
</Space>
</App>
全局场景(redux 场景)
// Entry component
import { App } from 'antd';
import type { MessageInstance } from 'antd/es/message/interface';
import type { ModalStaticFunctions } from 'antd/es/modal/confirm';
import type { NotificationInstance } from 'antd/es/notification/interface';
let message: MessageInstance;
let notification: NotificationInstance;
let modal: Omit<ModalStaticFunctions, 'warn'>;
export default () => {
const staticFunction = App.useApp();
message = staticFunction.message;
modal = staticFunction.modal;
notification = staticFunction.notification;
return null;
};
export { message, notification, modal };
// sub page
import React from 'react';
import { Button, Space } from 'antd';
import { message } from './store';
export default () => {
const showMessage = () => {
message.success('Success!');
};
return (
<Space>
<Button type="primary" onClick={showMessage}>
Open message
</Button>
</Space>
);
};
API
通用属性参考:通用属性
自
antd@5.1.0版本开始提供该组件。
App
| 参数 | 说明 | 类型 | 默认值 | 版本 | 全局配置 |
|---|---|---|---|---|---|
| component | 设置渲染元素,为 false 则不创建 DOM 节点 | ComponentType | false | div | 5.11.0 | × |
| message | App 内 Message 的全局配置 | MessageConfig | - | 5.3.0 | × |
| notification | App 内 Notification 的全局配置 | NotificationConfig | - | 5.3.0 | × |
主题变量(Design Token)
类型、继承关系和原生令牌声明保持固定源码原文;默认值由原生主题计算,并可能受 ConfigProvider 覆盖。本表不伪造静态默认值。
原生 ComponentToken 未声明可直接提取的自有字段;共享令牌或继承关系以以下声明为准。
声明来源: vendor/components/app/style/index.ts
import type { CSSObject } from '@ant-design/cssinjs';
import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal';
import { genStyleHooks } from '../../theme/internal';
// biome-ignore lint/suspicious/noEmptyInterface: ComponentToken need to be empty by default
export interface ComponentToken {}
interface AppToken extends FullToken<'App'> {}
FAQ
CSS Var 在 <App component={false}> 内不起作用
Ant Design v6 默认使用 CSS 变量。App 需要一个有效的 HTML 元素来承载 CSS 变量类名。将 component 设置为 false 时,App 仅提供上下文而不渲染根 DOM 节点,因此不会应用 App 根节点的类名和默认样式。在此模式下无法应用 className、rootClassName 和 style 属性,并会在开发环境下触发警告。如需消费这些样式,请保留默认的 div 或指定其他有效元素。
原生通用属性
Tips: 以下通用属性适用于 antd 大部分组件,不支持的组件会单独说明。
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| style | 自定义样式 | CSSProperties | - |
| className | 自定义类名 | string | - |
| rootClassName | 添加在组件最外层的 className | string | - |
| autoFocus | 自动获取焦点,仅对表单类、链接、交互容器等可聚焦元素生效 | boolean | false |
安装并复现示例
npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23
使用 ConfigProvider 和原生 App,并单独配置 dayjs 语言。每个示例在查看代码中列出完整源码文件和额外固定依赖。示例名称用于选择演示,不是组件通用属性。主题、语言与 SSR 初始化见资源安装指南。
原生类型参考
源码查看器包含未修改的原生实现和以下声明文件,继承类型仍位于原生包中。代码中的英文注释保留为源码参考。
vendor/components/app/App.tsxvendor/components/app/context.tsvendor/components/app/index.tsxvendor/components/app/style/index.ts
来源与许可
https://github.com/ant-design/ant-design/tree/4a39f54842eade4e565ab336ef6097cd7e723cdd
保留原生中英文正文与可执行示例;官网专用的嵌入章节和令牌表格在本地展开。Ant Design 使用 MIT 许可,另列依赖的许可证也需保留。上传预览禁止向外发起请求,不提供后端服务。