Загрузка...
Загрузка...
В React при работе с формами существует два подхода управления значениями полей: контролируемые и неконтролируемые компоненты.
Это компонент, в котором значение формы хранится в state React-компонента, и любое изменение пользовательского ввода происходит через onChange и обновление состояния.
import { useState } from "react";
function ControlledInput() {
const [value, setValue] = useState("");
return (
<input
type="text"
value={value}
onChange={(e) => setValue(e.target.value)}
/>
);
}
Здесь:
value управляется через React stateЭто компонент, в котором значение не хранится в состоянии React, а извлекается напрямую из DOM с помощью ref.
import { useRef } from "react";
function UncontrolledInput() {
const inputRef = useRef();
const handleSubmit = () => {
alert(inputRef.current.value);
};
return (
<>
<input type="text" ref={inputRef} />
<button onClick={handleSubmit}>Отправить</button>
</>
);
}
Здесь:
input прямо сейчас| Контролируемый компонент | Неконтролируемый компонент | |
|---|---|---|
| Где хранится значение | В state React | В DOM через ref |
| React "знает" значение? | Да | Нет |
| Подходит для валидации | Отлично подходит | Сложнее реализовать |
| Производительность | Может чаще перерендериваться | Быстрее при больших формах |
| Простота реализации | Немного сложнее | Проще в простых сценариях |
Контролируемый:
Неконтролируемый:
Совет:
Используйте контролируемые компоненты, когда вам нужно контролировать состояние и делать валидацию. Для простых форм или интеграции с formData лучше подойдут неконтролируемые.