Radix UI предоставляет модульные, доступные и настраиваемые компоненты интерфейса, которые упрощают создание форм с учетом стандартов доступности. Основная цель — обеспечить, чтобы все элементы формы были корректно интерпретированы вспомогательными технологиями, такими как экранные читалки, и обеспечивали правильную навигацию с клавиатуры.
В Radix UI компоненты могут быть как контролируемыми, так и неконтролируемыми:
value и onChange.onValueChange для
отслеживания изменений.Такой подход обеспечивает гибкость при интеграции с формовыми
библиотеками, например react-hook-form, позволяя легко
подключать валидацию и отслеживание состояния формы.
FormField и FormControlRadix UI рекомендует использовать семантическое разделение:
Пример структуры:
Email
Здесь:
FormLabel связывается с FormControl через
id.FormMessage автоматически отображает сообщения об
ошибках или подсказки.Radix UI заботится о корректной работе ARIA-атрибутов. Основные принципы:
aria-invalid используется для указания
поля с ошибкой.aria-describedby связывает поле с
сообщением об ошибке или подсказкой.role="alert" на элементах сообщений
уведомляет экранные читалки о динамических изменениях состояния.Пример динамической ошибки:
Имя пользователя
Имя пользователя обязательно
Все компоненты Radix UI обеспечивают корректную навигацию с клавиатуры:
data-state и data-disabled.Radix UI интегрируется с любыми библиотеками валидации. Структура компонента позволяет динамически отображать сообщения об ошибках:
Пароль
Поле обязательно
Пароль слишком короткий
Ключевой момент: FormMessage может фильтровать сообщения
по типу ошибки, автоматически связываясь с соответствующим полем через
aria-describedby.
Radix UI предоставляет возможность полной кастомизации внешнего вида формы, сохраняя доступность:
asChild для передачи
стилизованного элемента без потери семантики.data-state,
data-disabled) позволяют создавать адаптивные стили через
CSS или CSS-in-JS.Пример кастомного чекбокса:
Checkbox.Root управляет ARIA-атрибутами и фокусом, а
кастомная иконка отображает состояние без нарушения доступности.
Все элементы Radix UI реагируют на события касания и поддерживают адаптивные размеры:
Radix UI не ограничивается собственным состоянием. Компоненты легко интегрируются с:
react-hook-formFormikZod или Yup для схемной валидацииПример с react-hook-form:
const { register, handleSubmit, formState } = useForm();
Email
{formState.errors.email && (
{formState.errors.email.message}
)}
Комбинация Radix UI и внешней библиотеки позволяет сохранять доступность и при этом внедрять сложную бизнес-логику валидации.