React·100 вопросов

Как сделать uncontrolled input и когда это оправдано?

Ответ

Неконтролируемые инпуты в библиотеке React представляют собой альтернативный подход к работе с формами, при котором значения полей хранятся не в реактивном состоянии компонента, а внутри самого DOM-дерева браузера. Такой подход во многом напоминает классическую веб-разработку, где данные извлекаются из элементов формы только в момент отправки. Для реализации этого паттерна вместо свойства value используется атрибут defaultValue, который задает лишь начальное значение поля, после чего элемент живет своей собственной жизнью независимо от реактивных циклов.

Для чтения введенных пользователем данных в неконтролируемых компонентах применяются ссылки, создаваемые с помощью хука useRef, которые привязываются непосредственно к элементам ввода. В момент отправки формы обработчик события вызывает сохраненное значение через свойство current.value целевого элемента. Такой подход оказывается особенно оправданным в следующих сценариях:

Создание очень больших форм с десятками полей, где каждый контролируемый символ приводил бы к лагам интерфейса из-за постоянных ререндеров.
Интеграция со сторонними библиотеками или старыми не-React скриптами, которые требуют прямого доступа к DOM-узлам формы.
Упрощение кода компонентов, когда вам не нужно отслеживать промежуточное состояние каждого символа, а важен только финальный результат при сабмите.

Важно отметить, что валидация в неконтролируемых формах обычно переносится на момент отправки данных или на событие потери фокуса полем, а не выполняется при каждом нажатии клавиши. Популярные библиотеки управления формами, такие как React Hook Form, активно используют именно неконтролируемый подход под капотом через ссылки, что позволяет им достигать феноменальной производительности и минимального потребления памяти.

Полезен ли этот ответ?

Другие вопросы этой темы

Связанные вопросы из других тем