Skip to content

Dialog

Dialog 用于承载需要用户聚焦处理的短流程。当前实现基于本库 Modal 内核,保留原有组合式 API,并接入本库的 classNameclassstylesx 样式能力。

Basic

Controlled

Dialog 支持 openonOpenChange,适合由表单状态、异步提交结果或路由状态控制开合。

Custom Layout / SX

DialogContent 可以通过 showClose={false} 隐藏默认关闭按钮,也可以使用 overlayClassNameoverlaySxoverlayBlur 单独调整遮罩层。

常见场景

基础反馈

用于按钮点击、异步流程或页面局部状态变化时给出明确反馈。

受控交互

打开、关闭、显示或隐藏等状态应由业务侧控制,组件负责渲染与回调。

样式与内容扩展

复杂内容通过 children 或插槽类 props 组合,视觉细节通过样式入口覆盖。

Usage

tsx
import {
  Dialog,
  DialogTrigger,
  DialogContent,
  DialogHeader,
  DialogTitle,
  DialogDescription,
  DialogFooter,
  DialogClose,
} from "@ldkj/web-ui";

export function Example() {
  return (
    <Dialog>
      <DialogTrigger>打开</DialogTrigger>
      <DialogContent>
        <DialogHeader>
          <DialogTitle>确认操作</DialogTitle>
          <DialogDescription>请确认当前操作是否继续。</DialogDescription>
        </DialogHeader>
        <DialogFooter>
          <DialogClose>取消</DialogClose>
          <button type="button">确认</button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  );
}

也可以使用静态子组件写法:

tsx
<Dialog>
  <Dialog.Trigger>打开</Dialog.Trigger>
  <Dialog.Content>
    <Dialog.Title>标题</Dialog.Title>
  </Dialog.Content>
</Dialog>

API

Components

组件说明
Dialog根组件,支持 opendefaultOpenonOpenChangemodallockScrolldestroyOnClosecloseOnMaskClick
DialogTrigger / Dialog.Trigger触发器。
DialogPortal / Dialog.PortalPortal 容器。
DialogClose / Dialog.Close关闭控件。
DialogOverlay / Dialog.Overlay遮罩层,支持本库样式能力。
DialogContent / Dialog.Content弹窗内容,会自动渲染遮罩和可选关闭按钮。
DialogHeader / Dialog.Header标题区域布局辅助组件。
DialogFooter / Dialog.Footer操作区布局辅助组件。
DialogTitle / Dialog.Title可访问标题。
DialogDescription / Dialog.Description可访问描述。

Dialog Props

属性说明类型默认值
open受控开关状态boolean-
defaultOpen非受控默认开关状态boolean-
onOpenChange开关状态变化回调(open: boolean) => void-
modal是否启用模态交互语义booleantrue
lockScroll打开时是否锁定页面滚动;false 时会强制 modal=falsebooleantrue

其余属性继承当前组件根级约定。

Styling Props

以下可渲染 DOM 的组件支持 classNameclassstylesx

  • DialogTrigger
  • DialogClose
  • DialogOverlay
  • DialogContent
  • DialogHeader
  • DialogFooter
  • DialogTitle
  • DialogDescription

DialogContent Props

属性说明类型默认值
showClose是否显示内置关闭按钮booleantrue
overlayClassName传给自动生成遮罩层的类名string-
overlaySx传给自动生成遮罩层的 sx 样式SxProps-
overlayBlur自动生成遮罩层是否启用默认模糊booleantrue
className内容容器类名string-
class内容容器类名别名string-
style内容容器行内样式CSSProperties-
sx内容容器本库样式对象SxProps-

DialogContent 支持 onOpenAutoFocusonCloseAutoFocusonEscapeKeyDownonPointerDownOutside 等行为控制属性。

DialogOverlay Props

属性说明类型默认值
blur是否启用默认遮罩模糊booleantrue
className自定义类名string-
class兼容历史 class 写法string-
style原生行内样式CSSProperties-
sx本库 sx 样式入口SxProps-

其余属性继承原生 div 属性。

组件扩展属性
DialogTriggerclassNameclassstylesxasChildasChildWrapper
DialogCloseclassNameclassstylesxasChildasChildWrapper
DialogHeaderclasssx(其余继承原生 div 属性)
DialogFooterclasssx(其余继承原生 div 属性)
DialogTitleclassNameclassstylesx(其余继承原生 h2 属性)
DialogDescriptionclassNameclassstylesx(其余继承原生 p 属性)

行为规则 / 优先级

  • 交互组件触发回调后,最终状态以业务侧传回的受控值为准。
  • classNameclass 用于追加类名;如同时传入原生 style,内联样式会按 React 规则覆盖同名 CSS。
  • 复杂内容优先通过组合能力传入,避免在组件内部硬编码业务文案。
  • Dialog 的默认值应服务于最常见场景,特殊场景通过显式 props 覆盖。

Notes

  • 推荐始终提供 DialogTitle;如果视觉上不需要标题,也应使用可访问隐藏样式保留语义。
  • DialogTitleDialogDescription 会重置标题/段落的默认排版样式,避免文档站或富文本容器的全局 h2p 样式影响弹窗布局。
  • 内置关闭按钮使用 aria-label="关闭弹窗",并会在 showClose={false} 时完全不渲染。
  • 自定义关闭按钮请使用 DialogClose,以保留统一关闭语义。
  • DialogContent 默认自动生成遮罩层;需要自定义结构时可以组合 DialogPortalDialogOverlayDialogContent
  • lockScroll={false} 时页面可滚动;若同时 closeOnMaskClick=true,点击遮罩会触发关闭回调链路。