Skyroc UI
弹层覆盖

AlertDialog

需要用户明确确认的重要操作对话框

确认对话框(AlertDialog)用于在执行删除、提交、覆盖等关键操作前,要求用户做出明确决策。

import {
  AlertDialog,
  AlertDialogAction,
  AlertDialogCancel,
  AlertDialogContent,
  AlertDialogDescription,
  AlertDialogFooter,
  AlertDialogHeader,
  AlertDialogOverlay,
  AlertDialogTitle
} from '@skyroc/web-ui';

何时使用

  • 操作具有风险或不可逆,需要用户再次确认时(如删除数据、重置配置)。
  • 流程需要被临时阻塞,必须等待用户确认或取消后才能继续。
  • 需要用明确的标题、描述和操作按钮说明决策后果时。
  • 普通页面提示使用 Alert;通用内容弹窗使用 Dialog;需要确认关键操作时使用 AlertDialog。

语义类型

通过 type 设置确认对话框的语义类型。组件会根据类型显示对应的默认图标,帮助用户快速识别操作性质。

类型语义适用场景
destructive危险操作删除、清空、覆盖等不可逆操作
success成功确认完成、提交、发布等积极结果
warning警告确认有潜在风险但仍可继续的操作
info信息确认阅读说明、确认已知信息或继续流程
Preview
Code
Loading...
Preview
Code
Loading...
Preview
Code
Loading...
Preview
Code
Loading...

尺寸

通过 size 调整对话框的宽度、间距、字号和按钮区域间距,从 xs2xl 共 6 个尺寸。

尺寸最大宽度字号适用场景
xsmax-w-md10px紧凑确认、短文本提示
smmax-w-md12px次级操作确认
mdmax-w-lg14px常规场景(默认)
lgmax-w-xl16px重要操作确认
xlmax-w-2xl18px内容较多的确认流程
2xlmax-w-3xl20px大幅内容或重点确认
Preview
Code
Loading...

自定义图标

通过 icon 传入自定义图标或视觉元素。传入 icon 后会覆盖 type 对应的默认图标。

Preview
Code
Loading...

按钮与页脚

默认页脚包含取消按钮和确认按钮。通过 showCancel={false} 可以隐藏取消按钮;通过 okTextcancelText 修改按钮文本;通过 onOkonCancel 监听用户操作。

如果需要完全自定义页脚内容,可通过 footer 传入 React 节点;设置为 nullfalse 时隐藏页脚。

自定义样式

通过 classNames 精细控制各个 slot 的 class,包括 overlaycontentheadertitledescriptionfootericon

也可以通过 contentPropsheaderPropstitlePropsdescriptionPropsfooterPropsoverlayProps 分别向对应结构组件传入额外属性。

API

AlertDialog

通用属性参考:基于 Radix UI AlertDialog,支持底层根组件、Portal、Overlay 和 Content 的相关属性。

属性说明类型默认值
trigger触发对话框打开的元素,通常是 ButtonReactNode-
title对话框标题,用于说明当前需要确认的操作ReactNode-
description*对话框描述文本,用于补充说明操作影响或风险string-
type语义类型,决定默认图标和语义色'destructive' | 'info' | 'success' | 'warning'-
size尺寸,影响对话框宽度、字号与间距'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
icon自定义图标,传入后覆盖 type 的默认图标ReactNode-
children插入到描述区域和页脚之间的自定义内容ReactNode-
footer自定义页脚内容;设为 null 或 false 时隐藏页脚ReactNode | null | false-
showCancel是否显示默认取消按钮booleantrue
okText默认确认按钮文本ReactNode'OK'
cancelText默认取消按钮文本ReactNode'Cancel'
onOk点击默认确认按钮时触发(event: React.MouseEvent<HTMLButtonElement>) => void-
onCancel点击默认取消按钮时触发(event: React.MouseEvent<HTMLButtonElement>) => void-
okButtonProps传递给默认确认按钮的 Button 属性ButtonProps-
cancelButtonProps传递给默认取消按钮的 Button 属性ButtonProps-
classNames各 slot 的自定义 class(overlay / content / header / title / description / footer / icon)AlertDialogClassNames-
contentProps传递给 AlertDialogContent 的额外 propsAlertDialogContentProps-
headerProps传递给 AlertDialogHeader 的额外 propsAlertDialogHeaderProps-
titleProps传递给 AlertDialogTitle 的额外 propsAlertDialogTitleProps-
descriptionProps传递给 AlertDialogDescription 的额外 propsAlertDialogDescriptionProps-
footerProps传递给 AlertDialogFooter 的额外 propsAlertDialogFooterProps-
overlayProps传递给 AlertDialogOverlay 的额外 propsAlertDialogOverlayProps-
forceMountPortal强制挂载 Portaltrue-
forceMountOverlay强制挂载 Overlaytrue-
open受控模式下的打开状态boolean-
defaultOpen非受控模式下的默认打开状态boolean-
onOpenChange打开状态变化时触发(open: boolean) => void-
className传递给内容容器的自定义 classClassValue-

子组件

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

属性说明类型默认值
AlertDialogAction确认操作按钮,继承 ButtonPropsButtonProps-
AlertDialogCancel取消操作按钮,继承 ButtonProps,默认 variant 为 plainButtonProps-
AlertDialogContent对话框内容容器,支持对应 Radix Content props、size 和 classNameAlertDialogContentProps-
AlertDialogDescription描述文本区域,支持对应 Radix Description props、size 和 classNameAlertDialogDescriptionProps-
AlertDialogFooter页脚容器,支持 div 元素 props、size 和 classNameAlertDialogFooterProps-
AlertDialogHeader头部容器,支持 div 元素 props、size 和 classNameAlertDialogHeaderProps-
AlertDialogOverlay遮罩层,支持对应 Radix Overlay props、size 和 classNameAlertDialogOverlayProps-
AlertDialogTitle标题区域,支持对应 Radix Title props、size 和 classNameAlertDialogTitleProps-

类型

AlertDialogProps

主组件属性。组合了 Radix AlertDialog Root、Content、Portal 的属性,并额外提供标题、描述、按钮、图标和 slot 样式配置。

字段类型说明
cancelButtonPropsButtonProps取消按钮属性。这里只引用 ButtonProps,不展开 Button 的字段。
cancelTextReact.ReactNode取消按钮文本。默认值为 Cancel。
childrenReact.ReactNode插入到描述区域和页脚之间的内容,也可来自底层 Radix 组件属性。
classNameClassValue内容容器的 class。来自 StyledComponentProps。
classNamesAlertDialogClassNames各 slot 的自定义 class。
containerElement | DocumentFragment | nullPortal 挂载容器。来自 Radix Portal props。
contentPropsAlertDialogContentProps传递给 AlertDialogContent 的额外属性。
defaultOpenboolean非受控模式下的默认打开状态。来自 Radix Root props。
description*string对话框描述文本。
descriptionPropsAlertDialogDescriptionProps传递给 AlertDialogDescription 的额外属性。
disabledPortalboolean类型中存在,但当前组件实现没有消费该字段;不建议依赖。
footerReact.ReactNode | null | false页脚内容。设为 null 或 false 时隐藏页脚。
footerPropsAlertDialogFooterProps传递给 AlertDialogFooter 的额外属性。
forceMounttrue强制挂载底层 Content 或 Portal。来自 Radix props。
forceMountOverlaytrue强制挂载遮罩层。
forceMountPortaltrue强制挂载 Portal。
headerPropsAlertDialogHeaderProps传递给 AlertDialogHeader 的额外属性。
iconReact.ReactNode标题前的图标或视觉元素。
okButtonPropsButtonProps确认按钮属性。这里只引用 ButtonProps,不展开 Button 的字段。
okTextReact.ReactNode确认按钮文本。默认值为 OK。
onCancel(e: React.MouseEvent<HTMLButtonElement>) => void点击取消按钮时触发。
onEscapeKeyDown(event: KeyboardEvent) => void按 Escape 触发关闭前的事件。来自 Radix Content props。
onOk(e: React.MouseEvent<HTMLButtonElement>) => void点击确认按钮时触发。
onOpenAutoFocus(event: Event) => void打开后自动聚焦前触发。来自 Radix Content props。
onOpenChange(open: boolean) => void打开状态变化时触发。来自 Radix Root props。
openboolean受控模式下的打开状态。来自 Radix Root props。
overlayPropsAlertDialogOverlayProps传递给 AlertDialogOverlay 的额外属性。
showCancelboolean是否显示默认取消按钮。默认值为 true。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。来自 StyledComponentProps。
titleReact.ReactNode对话框标题。
titlePropsAlertDialogTitleProps传递给 AlertDialogTitle 的额外属性。
triggerReact.ReactNode触发对话框打开的元素。
type'destructive' | 'info' | 'success' | 'warning'语义类型,用于决定默认图标。

AlertDialogClassNames

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

字段类型说明
overlayClassValue遮罩层的 class。
contentClassValue内容容器的 class。
headerClassValue头部区域的 class。
titleClassValue标题区域的 class。
descriptionClassValue描述文本的 class。
footerClassValue页脚区域的 class。
iconstring图标元素的 class。

AlertDialogContentProps

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

字段类型说明
childrenReact.ReactNode内容区域子节点。
classNameClassValue内容容器的 class。
forceMounttrue强制挂载内容容器。
idstringDOM id。来自 div 元素属性。
onCloseAutoFocus(event: Event) => void关闭后自动聚焦前触发。
onEscapeKeyDown(event: KeyboardEvent) => void按 Escape 时触发。
onOpenAutoFocus(event: Event) => void打开后自动聚焦前触发。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响内容容器字号、宽度和间距。

AlertDialogDescriptionProps

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

字段类型说明
childrenReact.ReactNode描述文本或自定义描述内容。
classNameClassValue描述区域的 class。
idstringDOM id。来自 p 元素属性。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响描述文本字号。

页脚容器属性。等价于 HTMLComponentProps<"div">。

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

AlertDialogHeaderProps

头部容器属性。等价于 HTMLComponentProps<"div">。

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

AlertDialogOverlayProps

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

字段类型说明
childrenReact.ReactNode遮罩层子节点。通常不需要传入。
classNameClassValue遮罩层的 class。
forceMounttrue强制挂载遮罩层。
idstringDOM id。来自 div 元素属性。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸属性会被接收,但当前遮罩层样式不依赖 size。

AlertDialogTitleProps

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

字段类型说明
childrenReact.ReactNode标题内容。
classNameClassValue标题区域的 class。
idstringDOM id。来自 h2 元素属性。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响标题字号和图标间距。

StyledComponentProps<T>

项目内用于包装 Radix props 的通用类型。

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

HTMLComponentProps<T>

HTML 元素属性包装类型,用于 Header 和 Footer 这类 div 容器。

字段类型说明
...React.ComponentPropsWithRef<T>React.ComponentPropsWithRef<T>继承指定 HTML 元素的原生属性和 ref。
classNameClassValue组件 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'项目统一尺寸类型。

DialogSlots

AlertDialog 可配置 classNames 的内置 slot

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

ClassValue

CSS 类名类型

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

On this page