Я пытаюсь реализовать инпут для ввода имени в модальном окне и сталкнулся с проблемой, что при обновлении страницы стейт не сохраняется в локал стор, а приходит в начальное состояние. Код прилагаю:
const [user, setUser] = useState({
firstVisit: true,
name: '',
modalVision: true,
modalText: 'something went wrong :,(' ,
})
useEffect(() => {
setUser(JSON.parse(localStorage.getItem('user')))
if (user.firstVisit) {
setUserName() // ЕСЛИ НЕ ВЫЗЫВАТЬ ЭТУ ФУНКЦИЮ, ТО ВСЕ РАБОТАЕТ КОРРЕКТНО
}
}, [])
useEffect(() => {
window.addEventListener("unload", () => {
localStorage.setItem('user', JSON.stringify(user))
})
})
function setUserName() {
setUser({
...user, modalVision: true, modalText: <input onKeyPress={(e) => {
if (e.key === 'Enter') {
setUser({...user, firstVisit: false, modalVision: false, name: e.target.value})
}
}}/>
})
}
Пробовал реализовать логику в самом модальном окне, а так же с помощью колбеков и тайм-аутов - результат тот же, полагаю, это происходит из-за вложенных вызовов setState, помогите разобраться.