Root является базовым контейнером для большинства
компонентов Radix UI. Он отвечает за управление состоянием,
синхронизацию внутренних элементов и предоставление контекста дочерним
компонентам. Почти все интерактивные элементы Radix UI требуют
обертывания в Root, чтобы корректно работали механизмы
управления открытием/закрытием и анимацией.
Основные особенности Root:
open и onOpenChange для внешнего
контроля состояния, либо полагаться на внутреннее управление.Пример использования в Radix UI Dropdown Menu:
import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
<DropdownMenu.Root>
<DropdownMenu.Trigger>Меню</DropdownMenu.Trigger>
<DropdownMenu.Content>
<DropdownMenu.Item>Пункт 1</DropdownMenu.Item>
<DropdownMenu.Item>Пункт 2</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
Trigger отвечает за открытие и закрытие компонентов,
обернутых в Root. Он может быть кнопкой, иконкой или любым
элементом, который реагирует на события пользователя.
Ключевые моменты:
onPointerDown, onKeyDown.Trigger
корректно запускает переходы.aria-haspopup и
aria-expanded.<DropdownMenu.Trigger className="button">
Открыть меню
</DropdownMenu.Trigger>
Portal используется для рендеринга дочерних элементов
вне DOM-иерархии родителя. Это критично для всплывающих элементов,
которые должны перекрывать другие компоненты или не зависеть от overflow
контейнеров.
Основные моменты:
container для рендеринга в нестандартное место в DOM.<DropdownMenu.Portal>
<DropdownMenu.Content className="dropdown-content">
<DropdownMenu.Item>Пункт 1</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Portal>
Overlay создаёт затемнённый или прозрачный слой поверх
остальной страницы. Обычно используется для модальных окон, тултипов и
других всплывающих компонентов, где требуется отделение визуальной
области и блокировка фоновых взаимодействий.
Особенности Overlay:
onPointerDownOutside.<Dialog.Overlay className="overlay" />
Content отвечает за визуальную часть всплывающего
компонента. Именно здесь размещаются меню, модальные окна, тултипы и
другие элементы интерфейса.
Основные возможности Content:
side, align и sideOffset.<DropdownMenu.Content
className="dropdown-content"
side="bottom"
align="start"
sideOffset={5}
>
<DropdownMenu.Item>Пункт 1</DropdownMenu.Item>
<DropdownMenu.Item>Пункт 2</DropdownMenu.Item>
</DropdownMenu.Content>
Компоненты Root, Trigger,
Portal, Overlay и Content тесно
связаны между собой:
Root управляет состоянием и контекстом.Trigger инициирует открытие/закрытие.Portal позволяет рендерить Content вне
DOM-иерархии.Overlay обеспечивает визуальное и функциональное
отделение.Content отображает основной интерфейсный блок с
возможностью анимации и позиционирования.Эта архитектура обеспечивает гибкость, модульность и простоту интеграции сложных UI-компонентов, сохраняя доступность и контроль над состоянием.