Radix UI представляет собой коллекцию низкоуровневых, полностью настраиваемых компонентов для React, ориентированных на создание доступных интерфейсов. Основная цель архитектуры библиотеки — предоставить структурные блоки, которые можно комбинировать и расширять без жестких ограничений на визуальный стиль.
Radix UI строится вокруг контейнеров и контроллеров состояния, что обеспечивает гибкость и предсказуемость работы компонентов:
Dialog.Root,
Accordion.Root). Они управляют состоянием, событиями и
контекстом для вложенных элементов.Dialog.Overlay или DropdownMenu.Item
обеспечивают доступность без визуальных стилей.Ключевой принцип: каждый компонент делится на «логическую» и «визуальную» части, что позволяет подключать стили и анимации независимо от внутренней логики.
Radix UI использует контекст React для централизованного управления состоянием компонентов. Основные подходы:
Accordion
позволяет передавать значение текущего открытого элемента или управлять
им через внутреннее состояние.onOpenChange, onValueChange), чтобы
синхронизировать состояние с внешними контроллерами или стором.Такой подход обеспечивает гибкость интеграции с любыми архитектурами управления состоянием, включая Redux, Zustand или Recoil.
Каждый компонент Radix UI изначально поддерживает ARIA-атрибуты и корректное управление фокусом:
aria-expanded,
aria-hidden, role.Roving Focus для списков элементов (например,
меню или радио-группы).Таким образом, архитектура библиотеки обеспечивает доступность по умолчанию, что минимизирует ошибки при интеграции.
Radix UI не навязывает визуальные стили, вместо этого предоставляя хуки и утилиты для анимации:
open, closed, intermediate,
позволяя подключать CSS или анимации через фреймворки вроде Framer
Motion.asChild для подмены корневого элемента на
любой React-элемент с сохранением всей логики.ClassName и style пропсы позволяют
добавлять кастомные стили без изменения внутренней логики.Это обеспечивает полное разделение логики и внешнего вида, что соответствует принципам атомарного дизайна.
В Radix UI компоненты взаимодействуют через согласованные контексты и пропсы:
Provider компоненты могут объединять состояние
нескольких связанных элементов (например, RadioGroup
управляет набором Radio).Trigger и Content элементы взаимодействуют
через контекст Root-компонента, передавая состояния
открытия/закрытия.Portal используется для рендеринга элементов вне
DOM-иерархии, сохраняя доступ к контексту и фокусировку.Такой подход позволяет создавать модульные, легко тестируемые интерфейсы, где каждое действие компонентов предсказуемо и изолировано.
Архитектура Radix UI изначально рассчитана на расширение:
asChild для
гибкой интеграции в сложные интерфейсы.Это позволяет интегрировать библиотеку в любые корпоративные и кастомные дизайн-системы, не ломая внутреннюю логику.