потому что стейт асинхронный
Я лог выводил через сет таймаут, тоже самое
а ты попробуй через useEffect
Все таки не понятно, почему сет таймаут не работает.
стейт не меняет переменную а пересоздает и в твоем сет таймауте будет ссылка на старый обьект
Ну понятно, я там и создаю новый объект и сетаю в стейт его, но консоль лог то почему берет старый объект?
у тебя нет понимания как работает стейт)) он не меняется внутри компонента, если ты вызваешь сет стейт, твоя функция вызывается еще раз с новыми значениями , а в стерой функции ничего не меняется , если ты юзнешь сеттаймаут он будет со старыми данными
const setState = (newState)=>{ const a =newState const render = ()=>{ console.log(a) setTimeout(()=>{ console.log(a) },[1000]) } render(); } setState(1); setState(2); что будет в консоли?
https://beta.reactjs.org/learn/state-as-a-snapshot И следующую тему читаешь
Советую почитать про них на learn.javascript, у меня с этим тоже были фундаментальные проблемы, после прочтения статей по данной теме прояснилась работа реакт, это в принципе не относится к реакт а к джабаскрипту в целом
Стейт это снапшот текущего состояния, поэтому все новые значения видно только после ререндера
Причём здесь стейт? Он за таймаут говорил
Какая разница лол, таймаут тоже новый в новом ререндере
Его вопрос состоит в том почему таймаут логает старый стейт
Стейт это и есть состояние. Состояние имеет снепшоты. Снепшоты это слепки во времени. Если в стейте будет int I = 0; затем будет I = 10. То получается 2 слепка. Где переменная I имела 0 и 10
Почитай про setState у реакта и про callback внутри setState((prevState) => ({ …prevState, }));
Та не, его изначальный вопрос вообще не о таймаутах, таймауты ничего не имеют общего со стейтом. Это чисто базовая работа стейта, которую Виктор Москалев уже ему обьяснил и привел отделный пример с сетТаймаутом.
Я ответил ему на сообщение где он упомянул про таймаут, скоуп тайм-аута определён тем окружением с которого он был запущен в стэк
Обсуждают сегодня