메인 콘텐츠로 건너뛰기

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
closeOnPressEscapeEsc 누름으로 닫기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'