跳到主要内容

Dialog 对话框

在保留当前页面状态的情况下,告知用户并承载相关操作。

基础用法​

受控对话框
import { useState } from 'react'
import { LhButton, LhDialog } from '@lh-ui/react'

export default function Demo() {
const [open, setOpen] = useState(false)

return (
<>
<LhButton type="primary" onClick={() => setOpen(true)}>
打开对话框
</LhButton>
<LhDialog
open={open}
title="提示"
width="420px"
footer={
<>
<LhButton onClick={() => setOpen(false)}>取消</LhButton>
<LhButton type="primary" onClick={() => setOpen(false)}>确定</LhButton>
</>
}
onClose={() => setOpen(false)}
>
<p>这是一个受控对话框。</p>
</LhDialog>
</>
)
}

Dialog Props​

属性说明类型可选值默认值
open是否打开(纯受控)boolean—false
title标题(无 header 时也作 aria-label 兜底)string——
width宽度string | number——
fullscreen全屏boolean—false
showClose显示关闭按钮boolean—true
closeOnClickModal点击遮罩关闭boolean—true
closeOnPressEscape按 Esc 关闭boolean—true
draggable可拖拽(拖标题栏)boolean—false
center标题与底部居中boolean—false
position自定义定位偏移{ top?: string; left?: string }——
lockScroll打开时锁定 body 滚动boolean—true
beforeClose关闭前拦截(返回 false / Promise<false> 则不关)() => boolean | Promise<boolean>——
top与顶部的距离string——
zIndex层级(默认由 useLhZIndex 递增分配)number——
header自定义头部(覆盖 title)ReactNode——
footer自定义底部ReactNode——
themeVars组件级主题变量Record<string, string>——
sx快速布局属性SxProps——

Dialog 事件​

事件说明回调签名Vue 对照
onClose请求关闭(遮罩 / Esc / 关闭按钮触发,beforeClose 拦截后不调)() => voidupdate:modelValue
onOpen打开瞬间触发(DOM 已挂载)() => void@open
onOpened打开过渡结束后触发() => void@opened
onCloseStart关闭过渡开始时触发() => void@close
onClosed关闭过渡结束后触发(DOM 卸载)() => void@closed

ref​

forwardRef<HTMLDivElement>。LhDialogInstance 暂无命令式方法。

纯受控语义

与 plus 不同,本库 Dialog 没有内部 isVisible 中间态:open 完全由外部 state 持有,任何关闭路径只调 onClose。详见 迁移指南。

多弹层 Esc

useLhOverlayStack 维护打开顺序栈,Esc 只关栈顶弹层,避免一次按键带走全部弹层。

样式​

import '@lh-ui/react/style/dialog'