Чтобы сбросить состояние в Redux, нужно создать корневой reducer, который обернёт твои объединённые reducers и будет обрабатывать логику сброса состояния. Такой подход гарантирует, что все reducers вернутся в исходное состояние, когда его вызовет конкретное действие.
Создай корневой reducer, который перехватывает действия и сбрасывает состояние, когда это необходимо:
const appReducer = combineReducers({
/* твои top-level reducers приложения */
})
const rootReducer = (state, action) => {
if (action.type === 'USER_LOGOUT') {
state = undefined
}
return appReducer(state, action)
}
Когда state устанавливается в undefined, Redux автоматически вызывает каждый reducer с undefined в качестве первого аргумента, заставляя их вернуть начальное состояние. Это полностью сбрасывает всё состояние приложения.
Если ты используешь redux-persist, нужно также очистить сохранённое хранилище, чтобы устаревшие данные не восстановились:
const rootReducer = (state, action) => {
if (action.type === 'USER_LOGOUT') {
Object.keys(state).forEach(key => {
storage.removeItem(`persist:${key}`)
})
state = undefined
}
return appReducer(state, action)
}
Этот код:
undefined, чтобы запустить инициализацию reducersundefinedUSER_LOGOUT для ясностиКогда ты устанавливаешь state = undefined в root reducer, Redux автоматически вызывает каждый отдельный reducer с undefined в качестве первого аргумента, заставляя их вернуть своё начальное состояние.
Новый — ещё не проверен сообществом
Вы