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