Radix UI предоставляет компонент ToggleGroup, который
позволяет объединять несколько переключателей (Toggle) в
логическую группу, обеспечивая синхронизацию состояния и управление
взаимодействием между элементами. Основная цель групп переключателей —
управление взаимозависимыми опциями с единым контролем состояния.
ToggleGroupКомпонент состоит из двух ключевых элементов:
ToggleGroup.Root – контейнер для всех
переключателей в группе. Именно здесь определяется тип взаимодействия и
общие свойства.ToggleGroup.Item – отдельный
переключатель внутри группы. Каждый элемент может иметь собственные
атрибуты состояния, но управляется через корневой контейнер.Пример базовой структуры:
import * as ToggleGroup from '@radix-ui/react-toggle-group';
<ToggleGroup.Root type="single" value={selected} onValueCha nge={setSelected}>
<ToggleGroup.Item value="bold">B</ToggleGroup.Item>
<ToggleGroup.Item value="italic">I</ToggleGroup.Item>
<ToggleGroup.Item value="underline">U</ToggleGroup.Item>
</ToggleGroup.Root>
Ключевые моменты:
type="single" задает режим одиночного выбора (аналог
радио-кнопок).value и onValueChange управляют состоянием
выбранного элемента.ToggleGroup.Item имеет обязательный атрибут
value, который идентифицирует элемент.Radix UI поддерживает два режима работы группы переключателей:
Одиночный выбор (type="single")
allowEmpty.Пример:
<ToggleGroup.Root type="single" value={fontStyle} onValueCha nge={setFontStyle} allowEmpty>
<ToggleGroup.Item value="bold">B</ToggleGroup.Item>
<ToggleGroup.Item value="italic">I</ToggleGroup.Item>
<ToggleGroup.Item value="underline">U</ToggleGroup.Item>
</ToggleGroup.Root>
В этом режиме пользователь может снять выбор с активного элемента,
если allowEmpty установлен в true.
Множественный выбор
(type="multiple")
value становится массивом, а onValueChange
возвращает обновленный массив выбранных элементов.Пример:
<ToggleGroup.Root type="multiple" value={formats} onValueCha nge={setFormats}>
<ToggleGroup.Item value="bold">B</ToggleGroup.Item>
<ToggleGroup.Item value="italic">I</ToggleGroup.Item>
<ToggleGroup.Item value="underline">U</ToggleGroup.Item>
</ToggleGroup.Root>
В этом режиме элементы можно комбинировать по желанию.
Radix UI предоставляет полное управление через контролируемые
компоненты, что позволяет интегрировать
ToggleGroup с React state, Redux или другими системами
управления состоянием.
Пример с React state:
const [selectedFormat, setSelectedFormat] = React.useState('bold');
<ToggleGroup.Root type="single" value={selectedFormat} onValueCha nge={setSelectedFormat}>
<ToggleGroup.Item value="bold">B</ToggleGroup.Item>
<ToggleGroup.Item value="italic">I</ToggleGroup.Item>
<ToggleGroup.Item value="underline">U</ToggleGroup.Item>
</ToggleGroup.Root>
Для множественного выбора:
const [selectedFormats, setSelectedFormats] = React.useState(['bold', 'italic']);
<ToggleGroup.Root type="multiple" value={selectedFormats} onValueCha nge={setSelectedFormats}>
<ToggleGroup.Item value="bold">B</ToggleGroup.Item>
<ToggleGroup.Item value="italic">I</ToggleGroup.Item>
<ToggleGroup.Item value="underline">U</ToggleGroup.Item>
</ToggleGroup.Root>
Использование контролируемого состояния обеспечивает синхронизацию UI с логикой приложения и позволяет реализовать сложные сценарии, например, сохранение настроек или динамическую активацию/деактивацию элементов.
Radix UI предоставляет стилизацию через стандартные CSS-классы или
CSS-in-JS. Элементы переключателей могут менять внешний вид в
зависимости от состояния pressed:
<ToggleGroup.Item
value="bold"
className={`toggle-item ${isSelected ? 'selected' : ''}`}
>
B
</ToggleGroup.Item>
Ключевые псевдоклассы:
[data-state="on"] – активное состояние элемента.[data-state="off"] – неактивное состояние
элемента.Пример с Tailwind CSS:
<ToggleGroup.Item
value="italic"
className="px-3 py-1 rounded bg-gray-200 data-[state=on]:bg-blue-500 data-[state=on]:text-white"
>
I
</ToggleGroup.Item>
Radix UI обеспечивает автоматическую поддержку ARIA-атрибутов и навигации с клавиатуры:
Эти особенности делают ToggleGroup полностью доступным
для пользователей с ограниченными возможностями, что важно для
корпоративных и публичных приложений.
Группы переключателей легко интегрируются с другими компонентами Radix UI:
Tooltip для отображения подсказок о
функции каждого переключателя.Popover или Dialog для выбора
настроек из всплывающего меню.Form и внешними state-менеджерами для
динамических форм.Пример интеграции с Tooltip:
<ToggleGroup.Item value="bold">
<Tooltip content="Жирный текст">B</Tooltip>
</ToggleGroup.Item>
Группы переключателей в Radix UI позволяют создавать интуитивные, доступные и легко управляемые интерфейсы для выбора параметров, обеспечивая гибкость между одиночным и множественным выбором, поддержку кастомной стилизации и полную интеграцию с React state.