Перейти к основному содержимому

Диалог

Информирует пользователя и содержит связанные действия, не теряя текущего состояния страницы.

Базовое использование​

Контролируемый диалог
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>
</>
)
}

Props компонента Dialog​

ПропОписаниеТипДопустимые значенияПо умолчанию
openОткрыт ли (полностью контролируемый)boolean—false
titleЗаголовок (при отсутствии header используется как запасной aria-label)string——
widthШиринаstring | number——
fullscreenНа весь экранboolean—false
showCloseПоказывать кнопку закрытияboolean—true
closeOnClickModalЗакрывать по нажатию на маскуboolean—true
closeOnPressEscapeЗакрывать по Escboolean—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'