reactjs - Redux-persist 不断加载
问题描述
动机
我想在页面刷新/重定向时保留用户信息,但我也想在注销操作后清除它。
配置
const rootReducer = combineReducers({productsReducer, auth: accessReducer, usersReducer});
const persistConfig = {
key: 'root',
storage,
whitelist: ['auth']
};
我只想保留数据,accessReducer
这就是它被列入白名单的原因。现在我想以重置所有数据的方式处理注销。为此,我创建了 logoutReducer:
注销减速器
export const logout = () => ({
type: 'USER_LOGOUT'
});
const logoutReducer = (state, action) => {
if(action.type = 'USER_LOGOUT'){
state = undefined;
}
return rootReducer(state, action);
};
存储和持久化
const persistedReducer = persistReducer(persistConfig, logoutReducer);
export const store = createStore(persistedReducer, applyMiddleware(thunk));
export const persistor = persistStore(store);
问题
运行应用程序后,我会获得来自<Loader/>
in的加载信息PersistGate
:
<Provider store={store}>
<PersistGate loading={<Loader/>} persistor={persistor}>
...
</PersistGate>
</Provider>
可能的原因
现在我想这是因为我通过logoutReducer
了它只引用了其他减速器,这就是配置失败的原因。如何保留用户信息并保留注销清除存储技巧?有没有其他解决方案?任何帮助将不胜感激♥
解决方案
回答
在对这个问题进行研究期间,我发现了这个问题,海报也有类似的问题。解决方案在这篇文章的最后一条评论中,即: react-reset。这是我将此包应用于上述问题:
const appReducer = combineReducers({productsReducer, auth: accessReducer, usersReducer});
const persistConfig = {
key: 'root',
storage,
whitelist: ['auth']
};
const enHanceCreateStore = compose(
applyMiddleware(thunk),
reduxReset()
)(createStore);
const persistedReducer = persistReducer(persistConfig, appReducer);
export const store = enHanceCreateStore(persistedReducer);
export const persistor = persistStore(store);
然后,您只需简单地执行从以下位置给出的注销调度操作redux-reset
:
store.dispatch({
type: 'RESET'
})
推荐阅读
- python - 在 Keras 模型中获取中间层输出的正确方法?
- c# - 如何在跳跃运动中获得稳定的尖端位置
- java - 删除 google play 游戏数据后卡住无法登录
- asynchronous - 如何在 AbortController.abort() 之后启动另一个请求?
- javascript - iframe [src]="videoUrl | sanitize" - 当页面重新加载导致我的网站出现 404 iframe
- html - ngIf Angular 和摆脱 Angular 6 中的组件
- python - python通用重定向到URL
- azure-ad-b2c - 自定义资源所有者策略
- google-chrome - 为什么 ChromeDriver 不需要 Chrome 或 Chromium?
- sql - width_bucket 不返回等宽的桶