Получение данных из SessionStorage с помощью useEffect и попытка передать их для обновления useState при монтировании компонента. Кажется, проблема в том, КОГДА данные передаются в состояние, поскольку передача фиксированного числа действительно правильно обновляет состояние.
На самом деле я вижу, что после размонтирования и повторной установки компонента состояние (правильно) сбрасывается до начального значения, но значение, установленное в SessionStorage, не передается из useEffect.
Может быть проблема в том, что useEffect действует как componentDidMount, а не componentWillMount?
С другой стороны, SessionStorage не сохраняется при обновлении страницы, что странно, поскольку я думал, что он уходит только при закрытии вкладки.
const [movieCounter, setMovieCounter] = useState<number>(1)
const [serieCounter, setSerieCounter] = useState<number>(1)
console.log(movieCounter + ' state') // this logs 1 after re-mount
useEffect(() => {
return () => {
//this works
sessionStorage.setItem('abc123', JSON.stringify(movieCounter))
sessionStorage.setItem('qwerty', JSON.stringify(serieCounter))
};
}, [movieCounter, serieCounter])
useEffect(() => {
const rehydrate1 = JSON.parse(sessionStorage.getItem('abc123') || '{}')
const rehydrate2 = JSON.parse(sessionStorage.getItem('qwerty') || '{}')
setMovieCounter(rehydrate1)
setMovieCounter(rehydrate2)
// here if I pass a fixed number i.e. 4 updates state correctly to 4
// on mount
// setMovieCounter(4)
// this logs actual value pulled from sessionstorage
console.log(rehydrate1 + ' json')
}, [])
Состояние при монтировании необходимо обновить на основе значений SessionStorage.
ОБНОВЛЕНИЕ
Хорошо, поэтому я просто заметил, что если я передаю фиксированное число в возвращаемой функции первого useEffect, значение передается в состояние при каждом монтировании.
// this updates the state to 60 after every re-mount of the component
useEffect(() => {
return () => {
sessionStorage.setItem('abc123', JSON.stringify(60))
sessionStorage.setItem('qwerty', JSON.stringify(60))
};
}, [movieCounter, serieCounter])
Я думаю, что мне здесь не хватает чего-то простого