logoNamu Design

⌘ K
  • Design
  • Development
  • Components
  • Blog
  • Resources
1.0.0
  • Components Overview
  • General
    • Button
    • FloatButtonNew
    • Icon
    • Typography
  • Layout
    • Divider
    • Grid
    • Layout
    • Space
  • Navigation
    • Anchor
    • Breadcrumb
    • Dropdown
    • Menu
    • Pagination
    • Steps
  • Data Entry
    • AutoComplete
    • Cascader
    • Checkbox
    • ColorPickerNew
    • DatePicker
    • Form
    • Input
    • InputNumber
    • Mentions
    • Radio
    • Rate
    • Select
    • Slider
    • Switch
    • TimePicker
    • Transfer
    • TreeSelect
    • Upload
  • Data Display
    • Avatar
    • Badge
    • Calendar
    • Card
    • Carousel
    • Collapse
    • Descriptions
    • Empty
    • Image
    • List
    • Popover
    • QRCodeNew
    • Segmented
    • Statistic
    • Table
    • Tabs
    • Tag
    • Timeline
    • Tooltip
    • TourNew
    • Tree
  • Feedback
    • Alert
    • Drawer
    • Message
    • Modal
    • Notification
    • Popconfirm
    • Progress
    • Result
    • Skeleton
    • Spin
    • Watermark
  • Other
    • Affix
    • AppNew
    • ConfigProvider
When To Use
Examples
Basic
Asynchronously close
Customized Footer
Use hooks to get context
Internationalization
Manual to update destroy
To customize the position of modal
Customize footer buttons props
Custom modal content render
To customize the width of modal
Static Method
Static confirmation
destroy confirmation modal dialog
API
Modal.method()
Modal.useModal()
Design Token
FAQ
Why content not update when Modal closed?
Why I can not access context, redux, ConfigProvider locale/prefixCls in Modal.xxx?
How to set static methods prefixCls ?

Modal

  • MessageNotification

    Resources

    Namu Design Charts
    Namu Design Pro
    Namu Design Pro Components
    Namu Design Mobile
    Namu Design Mini
    Namu Design Landing-Landing Templates
    Scaffolds-Scaffold Market
    Umi-React Application Framework
    dumi-Component doc generator
    qiankun-Micro-Frontends Framework
    ahooks-React Hooks Library
    Ant Motion-Motion Solution
    China Mirror 🇨🇳

    Community

    Awesome Namu Design
    Medium
    Twitter
    yuqueNamu Design in YuQue
    Namu Design in Zhihu
    Experience Cloud Blog
    seeconfSEE Conf-Experience Tech Conference

    Help

    GitHub
    Change Log
    FAQ
    Bug Report
    Issues
    Discussions
    StackOverflow
    SegmentFault

    Ant XTechMore Products

    yuqueYuQue-Document Collaboration Platform
    AntVAntV-Data Visualization
    EggEgg-Enterprise Node.js Framework
    kitchenKitchen-Sketch Toolkit
    xtechAnt Financial Experience Tech
    Theme Editor
    Made with ❤ by
    Ant Group and Namu Design Community

    Modal dialogs.

    When To Use

    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 App.useApp hooks.

    Examples

    Basic

    Basic modal.

    expand codeexpand code
    Customized Footer

    A more complex example which define a customized footer button bar. The dialog will change to loading state after clicking the submit button, and when the loading is done, the modal dialog will be closed.

    You could set footer to null if you don't need default footer buttons.

    expand codeexpand code
    Internationalization

    To customize the text of the buttons, you need to set okText and cancelText props.

    expand codeexpand code
    To customize the position of modal

    You can use centered,style.top or other styles to set position of modal dialog.

    expand codeexpand code
    Custom modal content render

    Custom modal content render. use react-draggable implements draggable.

    expand codeexpand code
    Static Method

    In most case, you do not need static method. It can not consume context like dynamic theme. Please use hooks version or App provided instance first.

    expand codeexpand code
    destroy confirmation modal dialog

    Modal.destroyAll() will destroy all confirmation modal dialogs. Usually, you can use it in router change event to destroy confirm modal dialog automatically.

    expand codeexpand code
    Asynchronously close

    Asynchronously close a modal dialog when the OK button is pressed. For example, you can use this pattern when you submit a form.

    expand codeexpand code
    Use hooks to get context

    Use Modal.useModal to get contextHolder with context accessible issue. Only hooks method support Promise await operation.

    expand codeexpand code
    Manual to update destroy

    Manually updating and destroying a modal through instance.

    expand codeexpand code
    Customize footer buttons props

    Passing okButtonProps and cancelButtonProps will customize the OK button and cancel button props.

    expand codeexpand code
    To customize the width of modal

    Use width to set the width of the modal dialog.

    expand codeexpand code
    Static confirmation

    Use confirm() to show a confirmation modal dialog. Let onCancel/onOk function return a promise object to delay closing the dialog.

    expand codeexpand code

    API

    Common props ref:Common props

    PropertyDescriptionTypeDefaultVersion
    afterCloseSpecify a function that will be called when modal is closed completelyfunction-
    bodyStyleBody style for modal body element. Such as height, padding etcCSSProperties
    cancelButtonPropsThe cancel button propsButtonProps-
    cancelTextText of the Cancel buttonReactNodeCancel
    centeredCentered Modalbooleanfalse
    closeIconCustom close icon. 5.7.0: close button will be hidden when setting to null or falseboolean | ReactNode<CloseOutlined />
    confirmLoadingWhether to apply loading visual effect for OK button or notbooleanfalse
    destroyOnCloseWhether to unmount child components on onClosebooleanfalse
    focusTriggerAfterCloseWhether need to focus trigger element after dialog is closedbooleantrue4.9.0
    footerFooter content, set as footer={null} when you don't need default buttonsReactNode(OK and Cancel buttons)
    forceRenderForce render Modalbooleanfalse
    getContainerThe mounted node for Modal but still display at fullscreenHTMLElement | () => HTMLElement | Selectors | falsedocument.body
    keyboardWhether support press esc to closebooleantrue
    maskWhether show mask or notbooleantrue
    maskClosableWhether to close the modal dialog when the mask (area outside the modal) is clickedbooleantrue
    maskStyleStyle for modal's mask elementCSSProperties
    modalRenderCustom modal content render(node: ReactNode) => ReactNode-4.7.0
    okButtonPropsThe ok button propsButtonProps-
    okTextText of the OK buttonReactNodeOK
    okTypeButton type of the OK buttonstringprimary
    styleStyle of floating layer, typically used at least for adjusting the positionCSSProperties-
    titleThe modal dialog's titleReactNode-
    openWhether the modal dialog is visible or notbooleanfalse
    widthWidth of the modal dialogstring | number520
    wrapClassNameThe class name of the container of the modal dialogstring-
    zIndexThe z-index of the Modalnumber1000
    onCancelSpecify a function that will be called when a user clicks mask, close button on top right or Cancel buttonfunction(e)-
    onOkSpecify a function that will be called when a user clicks the OK buttonfunction(e)-
    afterOpenChangeCallback when the animation ends when Modal is turned on and off(open: boolean) => void-5.4.0

    Note

    • 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 every time, 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.

    Modal.method()

    There are five ways to display the information based on the content's nature:

    • Modal.info
    • Modal.success
    • Modal.error
    • Modal.warning
    • Modal.confirm

    The items listed above are all functions, expecting a settings object as parameter. The properties of the object are follows:

    PropertyDescriptionTypeDefaultVersion
    afterCloseSpecify a function that will be called when modal is closed completelyfunction-4.9.0
    autoFocusButtonSpecify which button to autofocusnull | ok | cancelok
    bodyStyleBody style for modal body element. Such as height, padding etcCSSProperties4.8.0
    cancelButtonPropsThe cancel button propsButtonProps-
    cancelTextText of the Cancel button with Modal.confirmstringCancel
    centeredCentered Modalbooleanfalse
    classNameThe className of containerstring-
    closeIconCustom close icon. 5.7.0: close button will be hidden when setting to null or falseboolean | ReactNode<CloseOutlined />
    contentContentReactNode-
    footerFooter content, set as footer: null when you don't need default buttonsReactNode-5.1.0
    getContainerReturn the mount node for ModalHTMLElement | () => HTMLElement | Selectors | falsedocument.body
    iconCustom iconReactNode<ExclamationCircleFilled />
    keyboardWhether support press esc to closebooleantrue
    maskWhether show mask or not.booleantrue
    maskClosableWhether to close the modal dialog when the mask (area outside the modal) is clickedbooleanfalse
    maskStyleStyle for modal's mask elementobject{}
    okButtonPropsThe ok button propsButtonProps-
    okTextText of the OK buttonstringOK
    okTypeButton type of the OK buttonstringprimary
    styleStyle of floating layer, typically used at least for adjusting the positionCSSProperties-
    titleTitleReactNode-
    widthWidth of the modal dialogstring | number416
    wrapClassNameThe class name of the container of the modal dialogstring-4.18.0
    zIndexThe z-index of the Modalnumber1000
    onCancelSpecify 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. If the function does not take any parameter (!onCancel.length) then modal dialog will be closed unless returned value is true (!!onCancel()). You can also just return a promise and when the promise is resolved, the modal dialog will also be closedfunction(close)-
    onOkSpecify 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. If the function does not take any parameter (!onOk.length) then modal dialog will be closed unless returned value is true (!!onOk()). You can also just return a promise and when the promise is resolved, the modal dialog will also be closedfunction(close)-

    All the Modal.methods will return a reference, and then we can update and close the modal dialog by the reference.

    const modal = Modal.info();
    modal.update({
    title: 'Updated title',
    content: 'Updated content',
    });
    // on 4.8.0 or above, you can pass a function to update modal
    modal.update((prevConfig) => ({
    ...prevConfig,
    title: `${prevConfig.title} (New)`,
    }));
    modal.destroy();
    • Modal.destroyAll

    Modal.destroyAll() could destroy all confirmation modal dialogs(Modal.confirm|success|info|error|warning). 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)

    import { browserHistory } from 'react-router';
    // router change
    browserHistory.listen(() => {
    Modal.destroyAll();
    });

    Modal.useModal()

    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.

    const [modal, contextHolder] = Modal.useModal();
    React.useEffect(() => {
    modal.confirm({
    // ...
    });
    }, []);
    return <div>{contextHolder}</div>;

    modal.confirm return method:

    • destroy: Destroy current modal
    • update: Update current modal
    • then: (Hooks only) Promise chain call, support await operation
    // Return `true` when click `onOk` and `false` when click `onCancel`
    const confirmed = await modal.confirm({ ... });

    Design Token

    Component Token

    Global Token

    FAQ

    Why content not update when Modal closed?

    Modal will use memo to avoid content jumping when closed. Also, if you use Form in Modal, you can reset initialValues by calling resetFields in effect.

    Why I can not access context, redux, ConfigProvider locale/prefixCls in Modal.xxx?

    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:

    const [modal, contextHolder] = Modal.useModal();
    // then call modal.confirm instead of Modal.confirm
    return (
    <Context1.Provider value="Ant">
    {/* contextHolder is in Context1, which means modal will get context of Context1 */}
    {contextHolder}
    <Context2.Provider value="Design">
    {/* contextHolder is out of Context2, which means 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.

    App Package Component can be used to simplify the problem of useModal and other methods that need to manually implant contextHolder.

    How to set static methods prefixCls ?

    You can config with ConfigProvider.config