В чем разница между контролируемыми и неконтролируемыми компонентами

«В чем разница между контролируемыми и неконтролируемыми компонентами» — вопрос из категории React, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Контролируемые компоненты управляются React через состояние (state). Значение элемента формы (например, input) привязано к состоянию, а изменения обрабатываются через колбэки (onChange). React является "источником истины" для данных.

function ControlledComponent() {
  const [value, setValue] = useState('');
  return <input value={value} onChange={(e) => setValue(e.target.value)} />;
}

Неконтролируемые компоненты хранят своё состояние в DOM. Данные получаются через ref при необходимости (например, при отправке формы). React не контролирует значение напрямую.

function UncontrolledComponent() {
  const inputRef = useRef();
  const handleSubmit = () => {
    console.log(inputRef.current.value);
  };
  return <input ref={inputRef} />;
}

Ключевые различия:

  • Контролируемые: значение синхронизировано с React-состоянием
  • Неконтролируемые: значение хранится в DOM
  • Контролируемые требуют больше кода, но дают больше контроля
  • Неконтролируемые проще для интеграции с не-React кодом