Radix UI — это библиотека компонентов для React, ориентированная на создание доступных и настраиваемых интерфейсов. Одним из ключевых паттернов при работе с формами в Radix UI являются компоненты Root и Field, которые обеспечивают удобное управление состоянием, валидацию и интеграцию с внешними библиотеками форм.
Компонент Root в Radix UI выполняет роль контейнера для всей формы или группы связанных полей. Основные функции Root:
Пример использования Root:
import * as Form from '@radix-ui/react-form';
function MyForm() {
return (
console.log(data)}>
{/* Поля формы */}
);
}
Ключевые пропсы Root:
onSubmit: функция, вызываемая при успешной отправке
формы. В неё передаётся объект со всеми значениями полей.onInvalidSubmit: функция, вызываемая при попытке
отправки формы с ошибками.defaultValues: объект с начальными значениями полей
формы.disabled: булевое значение, которое делает все поля
формы неактивными.Root автоматически передает контекст всем вложенным Field-компонентам, что позволяет им работать без дополнительных оберток и пропсов для управления состоянием.
Компонент Field представляет отдельное поле формы и отвечает за:
Пример Field:
Email
Email обязателен
Некорректный формат email
Основные части Field:
asChild, чтобы можно было передавать
нативные элементы или кастомные компоненты.match можно указать тип ошибки, на который
нужно реагировать.Пропсы Field:
name — уникальное имя поля, которое используется для
формирования объекта данных при отправке формы.required — булевое значение, указывающее обязательность
заполнения поля.validate — функция валидации, которая принимает
значение и возвращает строку с ошибкой или undefined при
успешной проверке.Корреляция между Root и Field строится через контекст. Root предоставляет объект состояния и методы для обновления значений и ошибок, а Field автоматически подключается к этому контексту. Это позволяет:
Пример с несколькими полями:
console.log('Submitted data:', data)}
onInvalidSub mit={(errors) => console.log('Errors:', errors)}
>
Имя пользователя
Поле обязательно
Пароль
Пароль обязателен
В этом примере Root собирает значения username и
password и обеспечивает обработку ошибок через компоненты
Message, не требуя дополнительной логики управления состоянием.