Перейти к содержимому

45. Управляемые и неуправляемые

В React существует два способа работы с вводом данных в формах: управление через состояние React или использование ссылок на DOM-элементы.

Icon: ToggleLeft (Переключатель)

Данные формы обрабатываются состоянием компонента. Это рекомендуемый способ для большинства случаев.

graph LR
Input[Input] -->|onChange| State[React State]
State -->|value| Input

Данные формы хранятся в самом DOM, а доступ к ним осуществляется через useRef.

graph LR
DOM[DOM Element] -->|useRef| Logic[React Logic]
ХарактеристикаУправляемыеНеуправляемые
Источник истиныReact StateDOM
Мгновенная валидацияЛегкоСложно
Форматирование вводаДаНет
ПроизводительностьРерендер на каждый символНет лишних ререндеров
const ControlledInput = () => {
const [value, setValue] = useState('');
return <input value={value} onChange={(e) => setValue(e.target.value)} />;
};
const UncontrolledInput = () => {
const inputRef = useRef(null);
const handleSubmit = () => alert(inputRef.current.value);
return (
<>
<input ref={inputRef} />
<button onClick={handleSubmit}>Отправить</button>
</>
);
};

Используйте управляемые компоненты для сложной логики, динамических фильтров и валидации. Используйте неуправляемые компоненты для простых форм (например, логин/пароль), где данные нужны только при отправке, или при интеграции со сторонними библиотеками не на React.


Попробуйте примеры в интерактивном редакторе: