Вы должны отправить действие, чтобы обновить переменную state
.
if (localStorage.getItem("carts") !== null) {
const fetchedCarts = JSON.parse(localStorage.getItem("carts"));
dispatch({ type: 'UPDATE', payload: fetchedCarts })
}
Таким образом, вы должны добавить этот тип действия к переключателю редуктор , который вы уже использовали здесь:
const [state, dispatch] = useReducer(reducer, initialState);
Пример структуры редуктора:
const reducer = (state, action) => {
switch (action.type) {
case 'UPDATE':
return { ...state, ...action.payload }
break
default:
return state
}
}
Я считаю, что useEffect()
должен иметь массив зависимостей (потому что обновление state
запустит его в текущей форме) .
Это возможно, если useEffect поддерживает возвращаемые объекты. Но невозможно вернуть объект в useEffect!
Ответом от useEffect должна быть функция (эта функция вызывается до того, как React размонтирует ловушку) - возвращение объекта здесь будет ошибка.