Radix UI представляет собой набор низкоуровневых, полностью управляемых React-компонентов для построения интерфейсов. Центральная идея заключается в композиции инструментов, позволяющей создавать сложные UI-элементы без потери контроля над поведением и стилями. Каждый компонент Radix UI построен на принципах контролируемого и неконтролируемого состояния, что даёт гибкость при интеграции с различными библиотеками стилей или системами управления состоянием.
Компоненты Radix UI можно использовать в двух режимах:
value или
open. Такой подход удобен для синхронизации с глобальным
состоянием приложения, например Redux или Zustand.defaultValue или
defaultOpen. Этот режим проще для локальных, изолированных
интерфейсов.Пример использования контролируемого компонента
Accordion:
import * as Accordion from '@radix-ui/react-accordion';
import { useState } from 'react';
function ControlledAccordion() {
const [value, setValue] = useState('item-1');
return (
<Accordion.Root type="single" value={value} onValueCha nge={setValue}>
<Accordion.Item value="item-1">
<Accordion.Header>
<Accordion.Trigger>Секция 1</Accordion.Trigger>
</Accordion.Header>
<Accordion.Content>Контент первой секции</Accordion.Content>
</Accordion.Item>
<Accordion.Item value="item-2">
<Accordion.Header>
<Accordion.Trigger>Секция 2</Accordion.Trigger>
</Accordion.Header>
<Accordion.Content>Контент второй секции</Accordion.Content>
</Accordion.Item>
</Accordion.Root>
);
}
Группировка компонентов в Radix UI строится вокруг Root-компонента, который определяет контекст для всех вложенных элементов. Принципы:
Toggle, Radio, Checkbox,
представлен набором вспомогательных компонентов: Root,
Item, Trigger, Indicator.Пример группировки Checkbox.Group:
import * as Checkbox from '@radix-ui/react-checkbox';
function CheckboxGroupExample() {
return (
<Checkbox.Root>
<Checkbox.Item value="apple">
<Checkbox.Indicator>✓</Checkbox.Indicator>
Яблоко
</Checkbox.Item>
<Checkbox.Item value="banana">
<Checkbox.Indicator>✓</Checkbox.Indicator>
Банан
</Checkbox.Item>
</Checkbox.Root>
);
}
Компоненты Radix UI, поддерживающие множественный выбор, позволяют
задавать type у Root-компонента:
RadioGroup, Accordion.CheckboxGroup.<Accordion.Root type="multiple">
...
</Accordion.Root>
Вложенные компоненты Indicator и Trigger
обеспечивают визуальную и интерактивную связь с
состоянием Root. Например, Accordion.Trigger реагирует на
open состояние Root, автоматически переключая видимость
контента. Это создаёт единый источник правды для
состояния интерфейса.
<Accordion.Trigger>
{({ open }) => open ? 'Скрыть' : 'Показать'}
</Accordion.Trigger>
Radix UI не навязывает стили. Для оформления используются классы CSS или сторонние библиотеки вроде Tailwind CSS, Stitches, Emotion. Подход с группировкой компонентов облегчает применение единого стиля к набору элементов через общие классы или контекст.
<Accordion.Item className="accordion-item">
<Accordion.Trigger className="accordion-trigger">
Заголовок
</Accordion.Trigger>
<Accordion.Content className="accordion-content">
Контент
</Accordion.Content>
</Accordion.Item>
Группировка компонентов Radix UI позволяет строить комплексные интерфейсы:
Checkbox и
Radio.Важно сохранять единую иерархию Root → Items → Indicators, чтобы состояние оставалось предсказуемым.
type у Root для контроля поведения
группы.onValueChange и value или
defaultValue.Грамотная группировка инструментов в Radix UI обеспечивает масштабируемость интерфейсов, предсказуемое управление состоянием и удобную стилизацию, что особенно важно для крупных проектов с динамическими и интерактивными элементами.