Как сделать выполнения console.log лишь после того как данные записались?
const [data, setData] = useState({
email: "",
password: "",
passwordCheck: "",
phone: "",
username: "",
address: ""
})
const onChangeHandler = (event) => {
setData({...data, [event.target.name]: event.target.value})
console.log(data)
}
<label>E-mail*</label>
<input type="email" onChange={onChangeHandler} defaultValue={data.email} name="email"/>
<div className="form-error"></div>
При вводе в input данные сохраняются в state. НО console.log(data) показывает с опозданием в одно действия( Хотя стоит после setData) к примеру если я напишу в input Test то console.log покажет что в state лишь Tes И за чего такая ошибка или где можно выполнить console.log лишь после обновления state. Важно для валидации
Ответы (1 шт):
Автор решения: Избыток Сусликов
→ Ссылка
setDate выполняется асинхронно потому и показывает неактуальный результат.
Можно написать useEffect, для того чтобы получить актуальный результат.
useEffect(() => {
console.log(data)
}, [data]);
Но так тоже впихивать целый объект в массив зависимостей не хорошая идея. Лучше использовать определенные поля этого объекта.
useEffect(() => {
console.log(data.email)
}, [data.email]);