【发布时间】:2019-06-09 12:07:42
【问题描述】:
我正在尝试解决这个问题,通常在较早的线程中解决 - How to reset the state of a Redux store? - 需要在用户注销时重新初始化/使整个 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 对象传递给它,执行此操作的正确位置在哪里?
【问题讨论】:
-
你有没有试过向reducer发送一个动作来设置状态未定义然后注销?
标签: javascript reactjs redux react-router react-router-redux