React Js localStorage
Делал обычный счётчик просмотренного манямэ. До закрытия/перезагрузки страницы я сохраняю все обьекты массива в localStorage. Проблема заключается в том, что я не могу передать в массив данные из localStorage. Ошибка не вылазит, но по консоль логу видно, что массив остается пустой. react-beforeunload
let [animes, setAnimes] = React.useState([
])
useBeforeunload(() =>{ // хук из react-beforeunload
delete localStorage.animeS
localStorage.animeS = JSON.stringify({...animes}); // заношу обьекты массива
if(animes.length > 0){
parsed = JSON.parse(localStorage.animeS)
}
})
if(localStorage.animeS !== '{}' && localStorage.animeS !== undefined && c !== 1){
// если в массиве что-то есть
parsed = JSON.parse(localStorage.animeS) // читаю json
console.log('Start') // start
setAnimes(animes.concat({ // дубликатом меняю массив
parsed
}))
console.log(animes) // array []
console.log(parsed) // Object { 0: {…}, 1: {…} }
c = 1
}
else if(c !== 1){
console.log('nema')
console.log(JSON.parse(localStorage.animeS))
c = 1
}
function addAnime(title){
const dataDay = new Date().getDate();
const dataMonth = new Date().getMonth()
const dataYear = new Date().getFullYear()
const datas = [dataDay + '.', '0' +(dataMonth + 1) + '.', dataYear];
setAnimes(animes.concat({
title,
id: animes.length + 1,
created: datas
}))
}
Ответы (1 шт):
Автор решения: Sergei Kirjanov
→ Ссылка
Попробуйте весь if с setAnimes делать из useEffect.
Не стоит менять стейт в рендере. На момент лога стейт мог не успеть смениться.