2016-08-11 11:41:06 +08:00
---
2016-11-09 14:43:32 +08:00
type: Feedback
2016-08-11 11:41:06 +08:00
category: Components
2016-09-21 11:28:38 +08:00
title: Modal
2020-05-31 11:48:34 +08:00
cover: https://gw.alipayobjects.com/zos/alicdn/3StSdUlSH/Modal.svg
2016-08-11 11:41:06 +08:00
---
Modal dialogs.
2016-09-10 13:43:30 +08:00
## When To Use
2016-08-11 11:41:06 +08:00
2019-05-07 14:57:32 +08:00
When requiring users to interact with the application, but without jumping to a new page and interrupting the user's workflow, you can use `Modal` to create a new floating layer over the current page to get user feedback or display information. Additionally, if you need show a simple confirmation dialog, you can use `antd.Modal.confirm()` , and so on.
2016-08-11 11:41:06 +08:00
## API
2020-10-12 10:47:09 +08:00
| Property | Description | Type | Default | Version |
| --- | --- | --- | --- | --- |
| afterClose | Specify a function that will be called when modal is closed completely | function | - | |
2020-10-22 13:14:19 +08:00
| bodyStyle | Body style for modal body element. Such as height, padding etc | CSSProperties | | |
2020-10-12 10:47:09 +08:00
| cancelButtonProps | The cancel button props | [ButtonProps ](/components/button/#API ) | - | |
2020-10-21 10:33:43 +08:00
| cancelText | Text of the Cancel button | ReactNode | `Cancel` | |
2020-10-12 10:47:09 +08:00
| centered | Centered Modal | boolean | false | |
| closable | Whether a close (x) button is visible on top right of the modal dialog or not | boolean | true | |
| closeIcon | Custom close icon | ReactNode | < CloseOutlined /> | |
| confirmLoading | Whether to apply loading visual effect for OK button or not | boolean | false | |
| destroyOnClose | Whether to unmount child components on onClose | boolean | false | |
| footer | Footer content, set as `footer={null}` when you don't need default buttons | ReactNode | (OK and Cancel buttons) | |
| forceRender | Force render Modal | boolean | false | |
| getContainer | Return the mount node for Modal | HTMLElement \| () => HTMLElement \| Selectors \| false | document.body | |
| keyboard | Whether support press esc to close | boolean | true | |
| mask | Whether show mask or not | boolean | true | |
| maskClosable | Whether to close the modal dialog when the mask (area outside the modal) is clicked | boolean | true | |
2020-10-22 13:14:19 +08:00
| maskStyle | Style for modal's mask element | CSSProperties | | |
2020-09-03 12:36:06 +08:00
| modalRender | Custom modal content render | (node: ReactNode) => ReactNode | - | 4.7.0 |
2020-10-12 10:47:09 +08:00
| okButtonProps | The ok button props | [ButtonProps ](/components/button/#API ) | - | |
| okText | Text of the OK button | ReactNode | `OK` | |
| okType | Button `type` of the OK button | string | `primary` | |
| style | Style of floating layer, typically used at least for adjusting the position | CSSProperties | - | |
| title | The modal dialog's title | ReactNode | - | |
| visible | Whether the modal dialog is visible or not | boolean | false | |
| width | Width of the modal dialog | string \| number | 520 | |
| wrapClassName | The class name of the container of the modal dialog | string | - | |
| zIndex | The `z-index` of the Modal | number | 1000 | |
2020-10-21 10:33:43 +08:00
| onCancel | Specify a function that will be called when a user clicks mask, close button on top right or Cancel button | function(e) | - | |
| onOk | Specify a function that will be called when a user clicks the OK button | function(e) | - | |
2017-12-28 16:26:03 +08:00
#### Note
2020-07-20 14:18:36 +08:00
- The state of Modal will be preserved at it's component lifecycle by default, if you wish to open it with a brand new state everytime, set `destroyOnClose` on it.
- There is a situation that using `<Modal />` with Form, which won't clear fields value when closing Modal even you have set `destroyOnClose` . You need `<Form preserve={false} />` in this case.
- `Modal.method()` RTL mode only supports hooks.
2017-08-06 00:04:25 +08:00
2017-05-16 10:43:12 +08:00
### Modal.method()
2016-08-11 11:41:06 +08:00
There are five ways to display the information based on the content's nature:
- `Modal.info`
- `Modal.success`
- `Modal.error`
- `Modal.warning`
- `Modal.confirm`
2019-05-07 14:57:32 +08:00
The items listed above are all functions, expecting a settings object as parameter. The properties of the object are follows:
2016-08-11 11:41:06 +08:00
2020-05-20 10:51:36 +08:00
| Property | Description | Type | Default | Version |
| --- | --- | --- | --- | --- |
2020-07-02 14:55:12 +08:00
| autoFocusButton | Specify which button to autofocus | null \| `ok` \| `cancel` | `ok` | |
2020-10-22 11:47:17 +08:00
| bodyStyle | Body style for modal body element. Such as height, padding etc | CSSProperties | | 4.8.0 |
2020-08-31 14:18:50 +08:00
| cancelButtonProps | The cancel button props | [ButtonProps ](/components/button/#API ) | - | |
2020-05-20 10:51:36 +08:00
| cancelText | Text of the Cancel button with Modal.confirm | string | `Cancel` | |
2020-06-17 23:18:14 +08:00
| centered | Centered Modal | boolean | false | |
2020-07-02 14:55:12 +08:00
| className | The className of container | string | - | |
2020-10-09 10:08:52 +08:00
| content | Content | ReactNode | - | |
2020-08-31 14:18:50 +08:00
| getContainer | Return the mount node for Modal | HTMLElement \| () => HTMLElement \| Selectors \| false | document.body | |
2020-07-02 14:55:12 +08:00
| icon | Custom icon | ReactNode | < QuestionCircle /> | 3.12.0 |
2020-06-17 23:18:14 +08:00
| keyboard | Whether support press esc to close | boolean | true | |
| mask | Whether show mask or not. | boolean | true | |
| maskClosable | Whether to close the modal dialog when the mask (area outside the modal) is clicked | boolean | false | |
2020-08-31 14:18:50 +08:00
| maskStyle | Style for modal's mask element | object | {} | |
| okButtonProps | The ok button props | [ButtonProps ](/components/button/#API ) | - | |
2020-05-20 10:51:36 +08:00
| okText | Text of the OK button | string | `OK` | |
| okType | Button `type` of the OK button | string | `primary` | |
2020-08-31 14:18:50 +08:00
| style | Style of floating layer, typically used at least for adjusting the position | CSSProperties | - | |
2020-10-09 10:08:52 +08:00
| title | Title | ReactNode | - | |
2020-07-02 14:55:12 +08:00
| width | Width of the modal dialog | string \| number | 416 | |
| zIndex | The `z-index` of the Modal | number | 1000 | |
2020-10-21 10:33:43 +08:00
| onCancel | Specify a function that will be called when the user clicks the Cancel button. The parameter of this function is a function whose execution should include closing the dialog. You can also just return a promise and when the promise is resolved, the modal dialog will also be closed | function(close) | - | |
| onOk | Specify a function that will be called when the user clicks the OK button. The parameter of this function is a function whose execution should include closing the dialog. You can also just return a promise and when the promise is resolved, the modal dialog will also be closed | function(close) | - | |
2016-08-11 11:41:06 +08:00
2018-08-25 21:51:19 +08:00
All the `Modal.method` s will return a reference, and then we can update and close the modal dialog by the reference.
2017-05-16 10:43:12 +08:00
```jsx
2018-08-25 21:51:19 +08:00
const modal = Modal.info();
modal.update({
title: 'Updated title',
2018-08-25 21:58:40 +08:00
content: 'Updated content',
2018-08-25 21:51:19 +08:00
});
2020-10-24 14:35:00 +08:00
// on 4.8.0 or above, you can pass a function to update modal
modal.update(prevConfig => ({
...prevConfig,
title: `${prevConfig.title} (New)` ,
}));
2018-08-25 21:51:19 +08:00
modal.destroy();
2017-05-16 10:43:12 +08:00
```
2018-12-03 21:49:00 +08:00
- `Modal.destroyAll`
2018-12-03 17:08:48 +08:00
2018-12-03 21:49:00 +08:00
`Modal.destroyAll()` could destroy all confirmation modal dialogs(Modal.info/Modal.success/Modal.error/Modal.warning/Modal.confirm). Usually, you can use it in router change event to destroy confirm modal dialog automatically without use modal reference to close( it's too complex to use for all modal dialogs)
2018-12-03 17:08:48 +08:00
```jsx
import { browserHistory } from 'react-router';
// router change
browserHistory.listen(() => {
2018-12-03 21:49:00 +08:00
Modal.destroyAll();
2018-12-03 17:08:48 +08:00
});
```
2020-02-03 13:00:35 +08:00
### Modal.useModal()
2020-10-21 10:33:43 +08:00
When you need using Context, you can use `contextHolder` which created by `Modal.useModal` to insert into children. Modal created by hooks will get all the context where `contextHolder` are. Created `modal` has the same creating function with `Modal.method` ](< #Modal.method()>).
2020-02-03 13:00:35 +08:00
```jsx
const [modal, contextHolder] = Modal.useModal();
React.useEffect(() => {
modal.confirm({
// ...
});
}, []);
return < div > {contextHolder}< / div > ;
```
2020-02-07 20:32:00 +08:00
2020-07-14 11:51:47 +08:00
### Modal.config() `4.5.0+`
2020-07-14 11:14:46 +08:00
Like `message.config()` , `Modal.config()` could set `Modal.confirm` props globally (such as `prefixCls` ), and it will affect `Modal.confirm|success|info|error|warning` **static methods only** .
```jsx
Modal.config({
2020-07-14 18:43:55 +08:00
rootPrefixCls: 'ant',
2020-07-14 11:14:46 +08:00
});
```
2020-02-07 20:32:00 +08:00
## FAQ
2020-11-12 11:17:34 +08:00
### Why I can not access context, redux, ConfigProvider `locale/prefixCls` in Modal.xxx?
2020-02-07 20:32:00 +08:00
antd will dynamic create React instance by `ReactDOM.render` when call Modal methods. Whose context is different with origin code located context.
When you need context info (like ConfigProvider context), you can use `Modal.useModal` to get `modal` instance and `contextHolder` node. And put it in your children:
```tsx
const [modal, contextHolder] = Modal.useModal();
2020-03-21 11:45:24 +08:00
// then call modal.confirm instead of Modal.confirm
2020-02-07 20:32:00 +08:00
return (
< Context1.Provider value = "Ant" >
{/* contextHolder is in Context1 which mean modal will not get context of Context1 */}
{contextHolder}
< Context2.Provider value = "Design" >
{/* contextHolder is out of Context2 which mean modal will not get context of Context2 */}
< / Context2.Provider >
< / Context1.Provider >
);
```
**Note:** You must insert `contextHolder` into your children with hooks. You can use origin method if you do not need context connection.
2020-10-15 18:32:48 +08:00
### How to disable motion?
You can config `transitionName=""` and `maskTransitionName=""` to remove motion class. But you should note that these prop is internal usage which we don't promise exist in next major version.