跳转到内容

Modal 对话框

何时使用

需要用户处理事务,又不希望跳转页面以致打断工作流程时,可以使用 Modal 在当前页面正中打开一个浮层,承载相应的操作。

另外当需要一个简洁的确认框询问用户时,可以使用 App.useApp 封装的语法糖方法。

代码演示

基本

loading

异步关闭

loading

自定义页脚

loading

加载中

loading

自定义页脚渲染函数

loading

使用 hooks 获得上下文

loading

手动更新和移除

loading

自定义位置

loading

静态方法

loading

静态确认对话框

loading

销毁确认对话框

loading

API

参数说明类型默认值版本
afterCloseModal 完全关闭后的回调function-
classNames配置弹窗内置模块的 className[Record<SemanticDOM, string>]-
styles配置弹窗内置模块的 style[Record<SemanticDOM, CSSProperties>]-5.10.0
cancelButtonPropscancel 按钮 propsButtonProps-
cancelText取消按钮文字ReactNode取消
centered垂直居中展示 Modalbooleanfalse
closable是否显示右上角的关闭按钮boolean | ClosableTypetrue-
closeIcon自定义关闭图标。5.7.0:设置为 nullfalse 时隐藏关闭按钮ReactNode<CloseOutlined />
confirmLoading确定按钮 loadingbooleanfalse
destroyOnHidden关闭时销毁 Modal 里的子元素booleanfalse5.25.0
focusTriggerAfterClose对话框关闭后是否需要聚焦触发元素booleantrue4.9.0
footer底部内容,当不需要默认底部按钮时,可以设为 footer={null}ReactNode | (originNode: ReactNode, extra: { OkBtn: VNode, CancelBtn: VNode }) => ReactNode(确定取消按钮)renderFunction: 5.9.0
forceRender强制渲染 Modalbooleanfalse
getContainer指定 Modal 挂载的节点,但依旧为全屏展示,false 为挂载在当前位置HTMLElement | () => HTMLElement | Selectors | falsedocument.body
keyboard是否支持键盘 esc 关闭booleantrue
mask遮罩效果boolean | {enabled: boolean, blur: boolean}true
maskClosable点击蒙层是否允许关闭booleantrue
modalRender自定义渲染对话框(node: ReactNode) => ReactNode-4.7.0
okButtonPropsok 按钮 propsButtonProps-
okText确认按钮文字ReactNode确定
okType确认按钮类型stringprimary
style可用于设置浮层的样式,调整浮层位置等CSSProperties-
loading显示骨架屏boolean5.18.0
title标题ReactNode-
open对话框是否可见boolean-
width宽度string | number | Breakpoint520Breakpoint: 5.23.0
wrapClassName对话框外层容器的类名string-
zIndex设置 Modal 的 z-indexnumber1000
onCancel点击遮罩层或右上角叉或取消按钮的回调function(e)-
onOk点击确定回调function(e)-
afterOpenChange打开和关闭 Modal 时动画结束后的回调(open: boolean) => void-5.4.0

注意

  • 静态使用 Modal.xxx() 时,请使用 hooks 语法, 静态有 bug
  • <Modal /> 默认关闭后状态不会自动清空,如果希望每次打开都是新内容,请设置 destroyOnHidden
  • <Modal /> 和 Form 一起配合使用时,设置 destroyOnHidden 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />
  • Modal.method() RTL 模式仅支持 hooks 用法。

包括:

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

以上均为一个函数,参数为 object,具体属性如下:

参数说明类型默认值版本
afterCloseModal 完全关闭后的回调function-4.9.0
autoFocusButton指定自动获得焦点的按钮null | ok | cancelok
cancelButtonPropscancel 按钮 propsButtonProps-
cancelText设置 Modal.confirm 取消按钮文字string取消
centered垂直居中展示 Modalbooleanfalse
className容器类名string-
closable是否显示右上角的关闭按钮boolean | ClosableTypefalse-
closeIcon自定义关闭图标ReactNodeundefined4.9.0
content内容ReactNode-
footer底部内容,当不需要默认底部按钮时,可以设为 footer: nullReactNode | (originNode: ReactNode, extra: { OkBtn: VNode, CancelBtn: VNode }) => ReactNode-renderFunction: 5.9.0
getContainer指定 Modal 挂载的 HTML 节点,false 为挂载在当前 domHTMLElement | () => HTMLElement | Selectors | falsedocument.body
icon自定义图标ReactNode<ExclamationCircleFilled />
keyboard是否支持键盘 esc 关闭booleantrue
mask遮罩效果boolean | {enabled: boolean, blur: boolean}true
maskClosable点击蒙层是否允许关闭booleanfalse
okButtonPropsok 按钮 propsButtonProps-
okText确认按钮文字string确定
okType确认按钮类型stringprimary
style可用于设置浮层的样式,调整浮层位置等CSSProperties-
title标题ReactNode-
width宽度string | number416
wrapClassName对话框外层容器的类名string-4.18.0
zIndex设置 Modal 的 z-indexnumber1000
onCancel点击取消回调,参数为关闭函数,若返回 promise 时 resolve 为正常关闭, reject 为不关闭function(close)-
onOk点击确定回调,参数为关闭函数,若返回 promise 时 resolve 为正常关闭, reject 为不关闭function(close)-

以上函数调用后,会返回一个引用,可以通过该引用更新和关闭弹窗。

ClosableType

参数说明类型默认值版本
afterCloseModal 完全关闭后的回调function--
closeIcon自定义关闭图标ReactNodeundefined-
disabled关闭图标是否禁用booleanfalse-
onClose弹窗关闭即时调用Functionundefined-

当你需要使用 Context 时,可以通过 Modal.useModal 创建一个 contextHolder 插入子节点中。通过 hooks 创建的临时 Modal 将会得到 contextHolder 所在位置的所有上下文。创建的 modal 对象拥有与 Modal.method 相同的创建通知方法。

jsx
const [modal, contextHolder] = Modal.useModal();

return <div>{contextHolder}</div>;

modal.confirm 返回方法:

  • destroy:销毁当前窗口
  • update:更新当前窗口
  • then:Promise 链式调用,支持 await 操作。该方法为 Hooks 仅有
tsx
//点击 `onOk` 时返回 `true`,点击 `onCancel` 时返回 `false`
const confirmed = await modal.confirm({ ... });

基于 MIT 许可发布