Полноэкранные диалоги (Full-Screen Dialogs) в MUI представляют собой
компонент Dialog, который занимает весь экран устройства,
обеспечивая пользователю максимальное пространство для взаимодействия с
содержимым. Такие диалоги чаще всего применяются для сложных форм,
просмотров детальной информации или сценариев редактирования, когда
стандартный модальный размер недостаточен.
Для использования полноэкранного диалога необходимо импортировать следующие компоненты из MUI:
import * as React from 'react';
import Dialog from '@mui/material/Dialog';
import AppBar from '@mui/material/AppBar';
import Toolbar from '@mui/material/Toolbar';
import IconButton from '@mui/material/IconButton';
import Typography from '@mui/material/Typography';
import Slide from '@mui/material/Slide';
import CloseIcon from '@mui/icons-material/Close';
import Button from '@mui/material/Button';
MUI поддерживает плавные переходы для диалогов через компонент
Transition. Чаще всего для полноэкранных диалогов
используют сдвиг Slide:
const Transition = React.forwardRef(function Transition(props, ref) {
return ;
});
direction="up" обеспечивает эффект выезжания диалога
снизу вверх. Переход передается в компонент Dialog через
свойство TransitionComponent.
export default function FullScreenDialog() {
const [open, setOpen] = React.useState(false);
const handleClickOpen = () => setOpen(true);
const handleClose = () => setOpen(false);
return (
);
}
Ключевые моменты:
fullScreen — включает полноэкранный режим.AppBar внутри диалога обеспечивает заголовок и кнопки
управления.Toolbar используется для правильного выравнивания
кнопок и заголовка.CloseIcon часто располагается слева, кнопка
действий (Сохранить) — справа.Полноэкранные диалоги автоматически подстраиваются под размеры экрана. Для мобильных устройств часто применяют медиазапросы, чтобы менять стиль заголовка или размеры кнопок.
Пример адаптивного AppBar:
Полноэкранный диалог
Здесь для экранов xs (мобильные) применяется основной
цвет и меньший шрифт, а для десктопов (md) — вторичный цвет
и увеличенный размер текста.
Открытие и закрытие диалога контролируется через состояние компонента
(useState). Для сложных форм часто применяют
useReducer или интеграцию с
Formik/React Hook Form для централизованного
управления данными формы.
const [open, setOpen] = React.useState(false);
const handleToggle = () => setOpen(prev => !prev);
TextField,
Select, Checkbox внутри контента.AppBar, чтобы
кнопки были всегда доступны.По умолчанию полноэкранный диалог закрывается только через кнопки или
программно. Для добавления закрытия по клику вне содержимого используют
событие onClose с проверкой reason:
Полноэкранные диалоги могут содержать большое количество элементов, поэтому важно:
React.lazy,
Suspense) для тяжелого контента.React.memo.