Skyroc UI
弹层覆盖

Dialog

用于承载表单、确认内容或短流程操作的通用模态对话框

Dialog 用于在当前页面之上展示一段需要用户关注的内容。它基于 Radix Dialog 封装,提供标题、描述、关闭按钮、内容区和页脚操作的常用组合。

import {
  Dialog,
  DialogAction,
  DialogClose,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogOverlay,
  DialogPortal,
  DialogRoot,
  DialogTitle,
  DialogTrigger
} from '@skyroc/web-ui';

何时使用

  • 需要在不离开当前页面的情况下展示补充内容、表单或短流程。
  • 需要用户完成一个轻量操作后再回到原页面。
  • 需要自定义页脚按钮、关闭按钮或内容布局。
  • 需要确认高风险操作时使用 AlertDialog;只展示页面内提示时使用 Alert。

基础用法

通过 trigger 提供打开对话框的触发元素,通过 titledescriptionchildren 组织内容。

Preview
Code
Loading...

页脚操作

默认页脚包含一个 OK 按钮,点击后会触发 onOk 并关闭对话框。通过 footer 可以完全替换页脚内容;设置为 nullfalse 时隐藏页脚。

Preview
Code
Loading...

尺寸

通过 size 调整对话框最大宽度、字号、内边距和各区域间距,从 xs2xl 共 6 个尺寸。

尺寸最大宽度字号适用场景
xsmax-w-md10px紧凑内容、短文本
smmax-w-md12px小型表单或辅助操作
mdmax-w-lg14px常规场景(默认)
lgmax-w-xl16px内容较多的通用弹窗
xlmax-w-2xl18px较宽的表单或信息展示
2xlmax-w-3xl20px大幅内容或复杂布局

自定义样式

通过 classNames 可以分别控制 overlaycontentheadertitledescriptionclosefooter。也可以通过 contentPropsheaderPropstitlePropsdescriptionPropsclosePropsfooterPropsoverlayProps 向对应结构组件传入额外属性。

受控状态

Dialog 透传 Radix Root 的 opendefaultOpenonOpenChangemodal。当前封装会始终渲染 DialogTrigger,因此实际使用时应提供 trigger 元素。

API

Dialog

通用属性参考:基于 Radix Dialog Root,支持打开状态、模态行为、标题描述、内容区、页脚和 slot 样式配置。

属性说明类型默认值
trigger*触发对话框打开的元素,通常是 ButtonReactNode-
title对话框标题,用于说明当前弹窗的目的ReactNode-
description对话框描述文本,用于补充说明上下文ReactNode-
children内容区节点,显示在头部和页脚之间ReactNode-
footer自定义页脚内容;设为 null 或 false 时隐藏页脚ReactNode | null | false-
okText默认 OK 按钮文本ReactNode'OK'
onOk点击默认 OK 按钮时触发DialogActionHandler-
okButtonProps传递给默认 OK 按钮的 Button 属性ButtonProps-
size尺寸,影响对话框宽度、字号与间距'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
classNames各 slot 的自定义 class(overlay / content / header / title / description / close / footer)DialogClassNames-
contentComponent替换默认内容容器的自定义组件DialogContentComponent-
contentProps传递给 DialogContent 的额外 propsDialogContentProps-
closeProps传递给 DialogClose 的额外 propsDialogCloseProps-
headerProps传递给 DialogHeader 的额外 propsDialogHeaderProps-
titleProps传递给 DialogTitle 的额外 propsDialogTitleProps-
descriptionProps传递给 DialogDescription 的额外 propsDialogDescriptionProps-
footerProps传递给 DialogFooter 的额外 propsDialogFooterProps-
overlayProps传递给 DialogOverlay 的额外 propsDialogOverlayProps-
open受控模式下的打开状态boolean-
defaultOpen非受控模式下的默认打开状态boolean-
onOpenChange打开状态变化时触发(open: boolean) => void-
modal是否以模态方式打开boolean-
className传递给内容容器的自定义 class;优先级高于 classNames.contentClassValue-

子组件

Dialog 也导出基础结构组件,适合在需要更细粒度组合时使用。

属性说明类型默认值
DialogRootRadix Dialog Root 原语,用于自定义组合根节点radix primitive-
DialogTriggerRadix Dialog Trigger 原语,用于自定义触发元素radix primitive-
DialogPortalRadix Dialog Portal 原语,用于控制挂载位置DialogPortalProps-
DialogOverlay遮罩层,支持对应 Radix Overlay props、size 和 classNameDialogOverlayProps-
DialogContent对话框内容容器,支持对应 Radix Content props、size 和 classNameDialogContentProps-
DialogHeader头部容器,支持 header 元素 props、size 和 classNameDialogHeaderProps-
DialogTitle标题区域,支持对应 Radix Title props、size 和 classNameDialogTitleProps-
DialogDescription描述文本区域,支持对应 Radix Description props、size 和 classNameDialogDescriptionProps-
DialogClose关闭按钮,未传 children 时显示默认 X 图标按钮DialogCloseProps-
DialogFooter页脚容器,支持 footer 元素 props、size 和 classNameDialogFooterProps-
DialogAction默认操作按钮,继承 ButtonProps,并会在点击后关闭对话框ButtonProps-

类型

DialogProps

主组件属性。组合了 Radix Dialog Root 属性,并额外提供标题、描述、内容区、页脚、默认操作按钮和 slot 样式配置。

字段类型说明
childrenReactNode内容区节点。
classNameClassValue内容容器的 class。来自 StyledComponentProps。
classNamesDialogClassNames各 slot 的自定义 class。
closePropsDialogCloseProps传递给关闭按钮的额外属性。
contentComponentDialogContentComponent替换默认内容容器的组件。
contentPropsDialogContentProps传递给内容容器的额外属性。
defaultOpenboolean非受控模式下的默认打开状态。来自 Radix Root props。
descriptionReactNode对话框描述内容。
descriptionPropsDialogDescriptionProps传递给描述文本区域的额外属性。
footerReactNode | null | false页脚内容。设为 null 或 false 时隐藏页脚。
footerPropsDialogFooterProps传递给页脚容器的额外属性。
headerPropsDialogHeaderProps传递给头部容器的额外属性。
modalboolean是否以模态方式打开。来自 Radix Root props。
okButtonPropsButtonProps默认 OK 按钮属性。这里只引用 ButtonProps,不展开 Button 的字段。
okTextReactNode默认 OK 按钮文本。默认值为 OK。
onOkDialogActionHandler点击默认 OK 按钮时触发。
onOpenChange(open: boolean) => void打开状态变化时触发。
openboolean受控模式下的打开状态。来自 Radix Root props。
overlayPropsDialogOverlayProps传递给遮罩层的额外属性。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。来自 StyledComponentProps。
titleReactNode对话框标题内容。
titlePropsDialogTitleProps传递给标题区域的额外属性。
trigger*ReactNode触发对话框打开的元素。

DialogClassNames

各 slot 的自定义 class,用于精细化控制 Dialog 各部分的样式。

字段类型说明
overlayClassValue遮罩层的 class。
contentClassValue内容容器的 class。
headerClassValue头部区域的 class。
titleClassValue标题区域的 class。
descriptionClassValue描述文本的 class。
closeClassValue关闭按钮的 class。
footerClassValue页脚区域的 class。

DialogCloseProps

关闭按钮属性。继承 Radix Dialog Close props,并通过 StyledComponentProps 增加 className 和 size。

字段类型说明
childrenReactNode自定义关闭按钮内容;不传时显示默认 X 图标按钮。
classNameClassValue关闭按钮的 class。
componentComponent替换底层关闭组件,默认使用 Radix Close。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响默认图标按钮大小和定位。

DialogContentProps

内容容器属性。继承 Radix Dialog Content props,并通过 StyledComponentProps 增加 className 和 size。

字段类型说明
childrenReactNode内容区域子节点。
classNameClassValue内容容器的 class。
componentComponent替换底层内容组件,默认使用 Radix Content。
forceMounttrue强制挂载内容容器。
idstringDOM id。来自 div 元素属性。
onCloseAutoFocusfunction关闭后自动聚焦前触发。
onEscapeKeyDownfunction按 Escape 时触发。
onInteractOutsidefunction与内容区域外部交互时触发。
onOpenAutoFocusfunction打开后自动聚焦前触发。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响内容容器字号、宽度和间距。

DialogDescriptionProps

描述文本属性。继承 Radix Dialog Description props,并通过 StyledComponentProps 增加 className 和 size。

字段类型说明
childrenReactNode描述文本或自定义描述内容。
classNameClassValue描述区域的 class。
componentComponent替换底层描述组件,默认使用 Radix Description。
idstringDOM id。来自 p 元素属性。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响描述文本字号。

页脚容器属性。继承 footer 元素属性,并通过 StyledComponentProps 增加 className 和 size。

字段类型说明
childrenReactNode页脚内容,通常是操作按钮。
classNameClassValue页脚容器的 class。
idstringDOM id。来自 footer 元素属性。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响页脚按钮间距。

DialogHeaderProps

头部容器属性。继承 header 元素属性,并通过 StyledComponentProps 增加 className 和 size。

字段类型说明
childrenReactNode头部内容,通常包含标题和描述。
classNameClassValue头部容器的 class。
idstringDOM id。来自 header 元素属性。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响头部内容间距。

DialogOverlayProps

遮罩层属性。继承 Radix Dialog Overlay props,并通过 StyledComponentProps 增加 className 和 size。

字段类型说明
childrenReactNode遮罩层子节点。通常不需要传入。
classNameClassValue遮罩层的 class。
componentComponent替换底层遮罩组件,默认使用 Radix Overlay。
forceMounttrue强制挂载遮罩层。
idstringDOM id。来自 div 元素属性。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸属性会被接收,但当前遮罩层样式不依赖 size。

DialogTitleProps

标题区域属性。继承 Radix Dialog Title props,并通过 StyledComponentProps 增加 className 和 size。

字段类型说明
childrenReactNode标题内容。
classNameClassValue标题区域的 class。
componentComponent替换底层标题组件,默认使用 Radix Title。
idstringDOM id。来自 h2 元素属性。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响标题字号。

StyledComponentProps<T>

项目内用于包装 Radix props 或原生元素 props 的通用类型。

字段类型说明
...sourcePropsinherited props without className继承原始组件属性,但重新定义 className。
classNameClassValue组件 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'项目统一尺寸类型。

DialogSlots

Dialog 可配置 classNames 的内置 slot

'close' | 'content' | 'description' | 'footer' | 'header' | 'overlay' | 'title'

DialogActionHandler

默认 OK 按钮点击回调

(event) => void

DialogContentComponent

自定义内容容器组件类型

(props: DialogContentProps) => ReactNode

DialogPortalProps

DialogPortal 透传的 Radix Portal 属性

portal props from @radix-ui/react-dialog

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page