Если при использовании React вы хотите обновить defaultValueполя ввода на основе состояния, вместо этого вам следует использовать свойство value. Свойство defaultValueиспользуется только для установки начального значения ввода и не обновляется при изменении состояния.
Вот несколько способов обновления входного значения при изменении состояния:
- Используйте свойство
value: вместо использованияdefaultValueиспользуйте свойствоvalueи обрабатывайте входные изменения с помощью>onChangeобработчик событий. Таким образом, входное значение будет контролироваться состоянием и обновляться соответствующим образом.
<input value={stateValue} onChange={handleChange} />
- Используйте хук
useEffect: вы можете использовать хукuseEffectдля обновления входного значения при изменении состояния. Установите значение состояния в качестве зависимости эффекта и обновите поле ввода с помощью свойства JavaScriptvalue.
import { useEffect, useState } from 'react';
function MyComponent() {
const [stateValue, setStateValue] = useState('');
useEffect(() => {
document.getElementById('myInput').value = stateValue;
}, [stateValue]);
const handleChange = (event) => {
setStateValue(event.target.value);
};
return <input id="myInput" onChange={handleChange} />;
}
- Используйте такую библиотеку, как
react-hook-form: такие библиотеки, какreact-hook-form, обеспечивают управление формами и могут обрабатывать входные значения и обновления состояния за вас. Они имеют встроенные механизмы для привязки входных значений к состоянию и обеспечивают функции проверки.
import { useForm } from 'react-hook-form';
function MyComponent() {
const { register, handleSubmit } = useForm();
const onSubmit = (data) => {
console.log(data);
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register('myField')} />
<input type="submit" value="Submit" />
</form>
);
}