В библиотеке Radix UI toggle-контролы реализуются с учётом современных стандартов веб-доступности (a11y). Компоненты, такие как Toggle, Switch и Checkbox, автоматически управляют состояниями ARIA и поведением клавиатуры, что обеспечивает корректную работу с экранными читалками и клавиатурной навигацией.
Ключевые атрибуты ARIA:
role="switch" — обозначает переключатель состояния
(включено/выключено). Используется для компонентов, выполняющих бинарное
действие.aria-checked — отражает текущее состояние переключателя
(true, false или mixed для
частично выбранных элементов).aria-label и aria-labelledby —
предоставляют текстовое описание, если визуальная метка
отсутствует.Radix UI автоматически синхронизирует эти атрибуты с внутренним состоянием компонентов, минимизируя ошибки при реализации toggle-контролов вручную.
Radix UI использует Compound Component Pattern, разделяя логику управления и визуальное представление:
import * as Toggle from '@radix-ui/react-toggle';
Уведомления
Toggle.Root — основной компонент,
управляющий состоянием pressed.pressed — булев флаг, определяющий
текущее состояние переключателя.onPressedChange — коллбэк, вызываемый
при изменении состояния.Такой подход отделяет логику состояния от визуального оформления, что облегчает тестирование и обеспечивает предсказуемое поведение компонентов.
Toggle-компоненты Radix UI полностью совместимы с клавиатурной навигацией:
Компонент автоматически обрабатывает события keydown и
синхронизирует визуальное состояние с ARIA-атрибутами. Это исключает
необходимость вручную писать обработчики клавиатурного ввода для каждого
toggle-элемента.
Для визуальной обратной связи Radix UI предоставляет псевдосостояния:
data-state="on" / data-state="off" —
позволяет стилизовать компонент в зависимости от текущего
состояния.data-disabled — отображает недоступный элемент.data-hover и data-focus — управляются
через CSS для интерактивных эффектов.Пример стилизации с использованием CSS:
.toggle-root[data-state="on"] {
background-color: #4ade80; /* зеленый фон при включении */
}
.toggle-root[data-state="off"] {
background-color: #f87171; /* красный фон при выключении */
}
.toggle-root[data-disabled] {
opacity: 0.5;
cursor: not-allowed;
}
Такое разделение визуального состояния и логики позволяет интегрировать компоненты в дизайн-системы без потери доступности.
Toggle-контролы Radix UI можно легко интегрировать с формами, включая
react-hook-form или стандартные HTML-формы. Для этого
используется атрибут name и управление состоянием через
onValueChange или onPressedChange.
Подписаться
При отправке формы состояние toggle автоматически преобразуется в
значение true или false, которое можно
обработать на сервере или в локальном состоянии приложения.
Групповые переключатели При нескольких
взаимосвязанных toggle-элементах рекомендуется использовать контейнер с
role="group" и явными aria-labelledby, чтобы
экранные читалки корректно интерпретировали структуру.
Частично выбранные состояния Для компонентов,
таких как мультиселекты, Radix поддерживает
aria-checked="mixed", что позволяет визуально и
семантически передавать промежуточное состояние.
Динамическая доступность Атрибут
disabled можно менять в рантайме, а Radix UI синхронизирует
это с aria-disabled и предотвращает интеракцию, не требуя
дополнительного кода.
Radix UI минимизирует ручную настройку доступности, однако комплексное тестирование гарантирует соответствие WCAG 2.1 и лучшим практикам интерфейсного дизайна.