PassFront
  1. PassFront
  2. База знаний
  3. Компоненты

Какие плюсы и минусы неуправляемого компонента?

Компоненты

Неуправляемый компонент — поле формы, значение которого хранится в DOM (defaultValue + чтение через ref), а не в React-state.

Плюсы

  • Нет ререндеров при вводе: React не участвует в наборе текста — большие формы работают заметно быстрее (на этом построен React Hook Form).
  • Меньше кода для сценария «заполнил → отправил»: не нужны useState и onChange на каждое поле.
  • Нативное поведение из коробки: автозаполнение браузера, встроенная HTML-валидация (required, pattern, type=email), FormData при сабмите.
  • Проще интеграция с не-React кодом и сторонними виджетами.
  • Для <input type="file" /> — единственный вариант: значение файла нельзя задать программно.

Минусы

  • Нет живой валидации и форматирования: маску телефона, лимит символов, немедленную подсветку ошибок делать неудобно (только вручную по событиям).
  • Значение недоступно декларативно: чтобы показать счётчик символов или зависимое поле, всё равно нужен state.
  • Императивное управление: сброс через form.reset() или запись в ref; программная подстановка значения — не «через рендер».
  • Труднее тестировать и отлаживать: источник правды в DOM, а не в состоянии, которое видно в DevTools.
  • Опасность смешения режимов (value={undefined} → предупреждение «uncontrolled to controlled»).

Когда выбирать

Простые формы «заполнил и отправил», большие формы с упором на производительность, работа с файлами, использование React Hook Form. Нужна живая логика по мере ввода — управляемый компонент.

Коротко для собеседования

Плюсы: ноль ререндеров при вводе, меньше кода, нативная валидация и автозаполнение, единственный путь для file input. Минусы: нет живой валидации и форматирования, значение недоступно декларативно, императивный сброс, сложнее отлаживать. Выбор: простые/большие формы — неуправляемые (или RHF), живая логика — управляемые.

Другие вопросы раздела