Back to Ant Design

App

components/app/index.zh-CN.md

6.3.73.7 KB
Original Source

何时使用 {#when-to-use}

  • 提供可消费 React context 的 message.xxxModal.xxxnotification.xxx 的静态方法,可以简化 useMessage 等方法需要手动植入 contextHolder 的问题。
  • 提供基于 .ant-app 的默认重置样式,解决原生元素没有 antd 规范样式的问题。

代码演示 {#examples}

<!-- prettier-ignore -->

<code src="./demo/basic.tsx">基本用法</code> <code src="./demo/config.tsx">Hooks 配置</code>

如何使用 {#how-to-use}

基础用法 {#basic-usage}

App 组件通过 Context 提供上下文方法调用,因而 useApp 需要作为子组件才能使用,我们推荐在应用中顶层包裹 App。

tsx
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 先后顺序 {#sequence-with-configprovider}

App 组件只能在 ConfigProvider 之下才能使用 Design Token,如果需要使用其样式重置能力,则 ConfigProvider 与 App 组件必须成对出现。

tsx
<ConfigProvider theme={{ ... }}>
  <App>
    ...
  </App>
</ConfigProvider>

内嵌使用场景(如无必要,尽量不做嵌套) {#embedded-usage-scenarios}

tsx
<App>
  <Space>
    ...
    <App>...</App>
  </Space>
</App>

全局场景(redux 场景) {#global-scene-redux}

tsx
// 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 };
tsx
// 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

通用属性参考:通用属性

[email protected] 版本开始提供该组件。

App

参数说明类型默认值版本
component设置渲染元素,为 false 则不创建 DOM 节点ComponentType | falsediv5.11.0
messageApp 内 Message 的全局配置MessageConfig-5.3.0
notificationApp 内 Notification 的全局配置NotificationConfig-5.3.0

主题变量(Design Token){#design-token}

<ComponentTokenTable component="App"></ComponentTokenTable>

FAQ

CSS Var 在 <App component={false}> 内不起作用 {#faq-css-var-component-false}

请确保 App 的 component 是一个有效的 html 标签名,以便在启用 CSS 变量时有一个容器来承载 CSS 类名。如果不设置,则默认为 div 标签,如果设置为 false,则不会创建额外的 DOM 节点,也不会提供默认样式。