В Radix UI компонент Root выполняет
роль корневого контейнера для группы связанных элементов интерфейса. Он
не рендерит визуальный элемент сам по себе, но управляет состоянием и
поведением дочерних компонентов. Например, для меню, аккордеонов или
радиокнопок Root обеспечивает синхронизацию выбранного
состояния, обработку открытий и закрытий, а также управление
фокусом.
Основные свойства Root:
defaultValue – начальное значение компонента, например,
выбранный элемент.value – управляемое значение для контролируемых
компонентов.onValueChange – callback-функция, вызываемая при
изменении состояния.modal – булевое значение, определяющее, является ли
компонент модальным (важно для управления фокусом и блокировки
скролла).Пример использования:
import * as Accordion from '@radix-ui/react-accordion';
<Accordion.Root type="single" defaultValue="item-1">
<Accordion.Item value="item-1">
<Accordion.Header>
<Accordion.Trigger>Раздел 1</Accordion.Trigger>
</Accordion.Header>
<Accordion.Content>
Контент раздела 1
</Accordion.Content>
</Accordion.Item>
</Accordion.Root>
Здесь Root управляет состоянием открытия одного из
элементов аккордеона и обеспечивает корректное взаимодействие дочерних
компонентов.
Компонент Item представляет отдельную единицу внутри
контейнера Root. Он всегда располагается внутри
Root и является непосредственным контейнером для
Header, Trigger и Content.
Item отвечает за отслеживание своего состояния: открыт или
закрыт, выбран или нет.
Ключевые свойства Item:
value – уникальный идентификатор элемента, используемый
Root для управления состоянием.disabled – блокирует элемент от взаимодействия с
пользователем.Пример использования:
<Accordion.Item value="item-2" disabled>
<Accordion.Header>
<Accordion.Trigger>Раздел 2</Accordion.Trigger>
</Accordion.Header>
<Accordion.Content>
Контент раздела 2 (недоступен)
</Accordion.Content>
</Accordion.Item>
Использование свойства disabled позволяет управлять
доступностью отдельных элементов, при этом Root продолжает
корректно управлять состоянием остальных элементов.
Header в Radix UI не отображает контент сам по себе, а
служит оберткой для Trigger. Он обеспечивает правильную
семантику и управление фокусом. Главная задача – объединить элементы
управления, такие как кнопки или интерактивные триггеры, внутри элемента
Item.
Особенности Header:
Trigger в
большинстве компонентов Radix UI.Trigger с Content через атрибуты ARIA.Пример использования:
<Accordion.Item value="item-3">
<Accordion.Header>
<Accordion.Trigger>Раздел 3</Accordion.Trigger>
</Accordion.Header>
<Accordion.Content>
Контент раздела 3
</Accordion.Content>
</Accordion.Item>
Без Header корректное управление фокусом и aria-связями
будет нарушено.
Trigger – это интерактивный компонент, который
инициирует открытие или закрытие содержимого. В большинстве случаев это
кнопка, но можно использовать любой элемент с обработкой событий
onClick и поддержкой keyboard navigation.
Ключевые свойства Trigger:
asChild – позволяет рендерить кастомный компонент
вместо стандартного, сохраняя поведение Radix UI.disabled – отключает взаимодействие, аналогично
Item.Пример использования с кастомным элементом:
<Accordion.Trigger asChild>
<button className="custom-trigger">Раздел 4</button>
</Accordion.Trigger>
Использование asChild делает компонент максимально
гибким для интеграции с существующим UI.
Content отвечает за отображение информации, связанной с
конкретным Item. Radix UI предоставляет управление
анимациями, фокусом и доступностью по умолчанию, включая ARIA-атрибуты
aria-hidden и id.
Особенности Content:
Item.asChild для кастомного рендеринга
содержимого.Пример использования:
<Accordion.Content>
<p>Подробная информация по разделу 4.</p>
</Accordion.Content>
Рекомендации по анимации:
motion из Framer Motion или
CSS-переходы.Эта структура компонентов — Root → Item → Header → Trigger → Content — является основной для большинства интерактивных элементов в Radix UI. Она обеспечивает модульность, управление состоянием и доступность без дополнительного кода.