Dialog 对话框
对话框。
#
使用场景需要用户处理事务,又不希望跳转页面以致打断工作流程时,可以使用 Dialog 在当前页面正中打开一个浮层,承载相应的操作。
另外当需要一个简洁的确认框询问用户时,可以使用 Dialog.confirm()
等快捷调用方法。
#
特性介绍#
对话框定位通过 placement
可以指定对话框在容器内的位置。对话框提供以下 9 种定位方式,默认为 <Dialog placement="center" />
container
top-left
top
top-right
left
center
right
bottom-left
bottom
bottom-right
在 placement
的基础上,可以通过 offset={[offsetX, offsetY]}
设置对话框的偏移量。
#
组件内部结构组件提供了一个简单的对话框结构,分为 header / main / footer 三个部分,每个部分都支持在上层进行覆盖。
#
代码示例#
基本对话框作为普通组件使用时,对话框是否展示由 visible
进行控制。
#
非模态对话框对于一些非必选/不紧急的对话框,我们建议设置 canCloseByEsc={true}
和 canCloseByOutSideClick={true}
来使用非模态对话框。
#
快捷调用tip
Dialog.alert(...)
与 Dialog.confirm(...)
会返回一个 Promise,该 Promise 会 resolve 一个布尔值,表示用户进行了「确认」或「取消」.
#
嵌套对话框#
动态尺寸与方位通过 placement
来控制对话框的方位,组件内部内置了 ResizeObserver
,当对话框内的尺寸发生变化时,组件会自动调整位置。
#
极简样式设置 minimal={true}
后,对话框只会保留最基本的定位功能与背景色,其余内容完全由上层进行控制。此时 title 和 footer 属性无效。
#
API#
快捷调用Dialog.show(config): string
#
根据 config
打开一个快捷对话框,config.title
作为对话框的标题, config.content
作为对话框的内容,其他属性详见 Dialog Props
返回一个字符串 key 表示该对话框实例,调用 Dialog.close(key)
可以主动关闭该对话框。
Dialog.confirm(config)
#
根据 config
打开一个快捷「确认」对话框,返回 Promise<boolean>
表示用户进行了「确认」或「取消」。
Dialog.alert(config)
#
根据 config
打开一个快捷「警告」对话框,返回 Promise<true>
表示用户进行了「确认」。
Dialog.close(key)
#
关闭一个对话框。
Dialog.closeAll()
#
关闭所有对话框。
#
Dialog.useDialog()当你需要使用 Context 时,可以通过 Dialog.useDialog 创建一个 contextHolder 插入子节点中。通过 hooks 创建的临时 Dialog 将会得到 contextHolder 所在位置的所有上下文。创建的 dialog 对象拥有与 Dialog.method 相同的创建通知方法。
#
Dialog Props字段 | 描述 | |
---|---|---|
style | CSSProperties | |
className | string | |
visible | boolean | |
onRequestClose | (reason: any) => void | |
content | ReactNode | |
renderChildren | (pass: { ref: Ref<Element>; }) => ReactNode 使用 render prop 的形式指定弹层内容,用于精确控制 DOM 结构 | |
title | ReactNode | |
footer | null | React.ReactElement | Action[] | |
onOk | () => void | |
onCancel | () => void | |
placement | PositionPlacement = center | |
offset | PositionOffset | |
canCloseByIcon | boolean = false是否显示对话框关闭图标 | |
浮层交互 | ||
canCloseByEsc | boolean = false是否支持 esc 按键关闭弹层 | |
canCloseByOutSideClick | boolean = false点击弹层外部区域是否关闭弹层(注意背景层也被认为是外部) | |
浮层生命周期 | ||
beforeOpen | (state?: any) => Promise<IOverlayAnimationProps> 浮层即将被打开时的回调 | |
onOpen | () => void 浮层打开时的回调 | |
afterOpen | () => void 浮层打开时的回调 | |
beforeClose | () => IOverlayAnimationProps 浮层即将被关闭时的回调 | |
onClose | () => void 浮层关闭时的回调 | |
afterClose | () => void 浮层关闭后的回调 | |
背景层 | ||
hasBackdrop | boolean = true是否展示背景层 | |
backdropStyle | CSSProperties | |
backdropClassName | string | |
浮层动画 | ||
animationDuration | string = 200ms动画持续时间(注意该 prop 会作为 CSS 变量的值,使用时要带上单位,例如 `'500ms'`) | |
animation | false | { in: string | Keyframes; out: string | Keyframes; } 弹层的出现和消失的动画,可以用 Overlay.animations.{name} 来引用弹层组件内置的动画效果 | |
浮层容器 | ||
usePortal | boolean 是否使用 portal 来渲染弹层内容 | |
portalContainer | HTMLElement | "DOCUMENT_BODY" 渲染组件的容器 | |
disableScroll | boolean | "force" = true是否禁用容器的滚动 |