Я пытаюсь решить проблему, решаемую, как правило, в более ранней ветке - Как сбросить состояние хранилища Redux? - необходимость повторной инициализации / аннулирования всего хранилища избыточности на пользователе выход из системы.
В моем случае, однако, что-то все еще не хватает. Я использую Redux с ConnectedRouter, и я попытался сделать следующее.
Определите rootReducer как:
export default history =>
combineReducers({
router: connectRouter(history),
user,
manager,
vendor
// rest of your reducers
});
Затем я делаю configureStore
, импортируя вышеприведенное как createRootReducer
:
const configureStore = (initialState = {}, history) => {
let composeEnhancers = compose;
const composeWithDevToolsExtension =
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__;
const enhancers = [];
const middleware = [sagaMiddleware, thunk, routerMiddleware(history)];
if (typeof composeWithDevToolsExtension === 'function') {
composeEnhancers = composeWithDevToolsExtension;
}
const store = createStore(
createRootReducer(history), // root reducer with router state
initialState,
composeEnhancers(applyMiddleware(...middleware), ...enhancers)
);
store.runSaga = sagaMiddleware.run;
store.subscribe(() => {
const state = store.getState();
const { session } = state['user'];
if (!session) {
console.log('no valid session');
initialState = undefined;
} else {
const { token } = session;
const decodedToken = jwt_decode(token);
const { exp } = decodedToken;
const now = new Date();
if (exp > now.getTime()) {
console.warn('token expired');
initialState = undefined;
} else {
console.log('token valid');
}
}
});
return store;
};
export default configureStore({}, history);
Идея состоит в том, что initialState = undefined;
должен сбросить мое состояние. Это не работает для меня, хотя.
Где было бы правильное место для этого, учитывая, что я использую ConnectedRouter
и передаю ему объект history
?