DOM и React Senior Формы обновлено

Контролируемый и неконтролируемый режим

Условие

Input работает в обоих режимах: если передан value, поле управляется снаружи и onChange обязателен; если передан только defaultValue, поле держит состояние само.

Что проверяют тесты

  • неконтролируемый держит состояние сам

  • контролируемый слушается снаружи

  • onChange вызывается в обоих режимах

  • без пропсов работает как пустое поле

Как подойти

Так устроены все библиотечные поля ввода. Режим определяется один раз по value !== undefined; переключение режима на лету React считает ошибкой и ругается в консоли. Хук useState вызывается безусловно - иначе нарушится правило хуков. onChange зовётся всегда, даже когда состояние внутреннее: иначе родитель не сможет реагировать на ввод.

Подсказки: 3
  1. Режим определяется наличием пропса value, а не его истинностью.
  2. Внутреннее состояние заводится всегда, но используется только в неконтролируемом режиме.
  3. value === undefined - единственный признак неконтролируемого режима.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме