使用react注入器时在注销时重置redux存储

使用react注入器时在注销时重置redux存储,redux,react-redux,state-management,react-boilerplate,Redux,React Redux,State Management,React Boilerplate,我的问题与下面的问题相同。但是有一个不同的图书馆。 我正在使用来自的redux注射器,并且正在使用图书馆提供的增强剂。 我需要在注销时清除所有redux状态,但由于我的注销位于单独的全局切片上,因此它只能影响全局切片,而不会影响其他redux状态。我如何清除所有其他要求全球国家采取行动的国家 以下是我如何组合减速器: 从'@reduxjs/toolkit'导入{combinereducer}; 导出函数createReducer(injectedReducers={}){ if(Object.

我的问题与下面的问题相同。但是有一个不同的图书馆。

我正在使用来自的redux注射器,并且正在使用图书馆提供的增强剂。 我需要在注销时清除所有redux状态,但由于我的注销位于单独的全局切片上,因此它只能影响全局切片,而不会影响其他redux状态。我如何清除所有其他要求全球国家采取行动的国家

以下是我如何组合减速器:

从'@reduxjs/toolkit'导入{combinereducer};
导出函数createReducer(injectedReducers={}){
if(Object.keys(injectedReducers.length==0){
返回状态=>state;
}
返回合并器({
…注射式减压器
});
}
我的globalReducer:

从'@reduxjs/toolkit'导入{createSlice};
常量初始状态={
加载:错误
};
const globalSlice=createSlice({
名称:'全球',
初始状态,
减速器:{
注销(状态){
返回状态;
}
}
});
导出常量{actions,reducer,name:sliceKey}=globalSlice;
我的商店/index.js

从'@reduxjs/toolkit'导入{configureStore,getDefaultMiddleware};
从“redux injectors”导入{createInjectorsEnhancer,forceReducerReload};
从“redux saga”导入createSagaMiddleware;
从“./reducers”导入{createReducer};
函数配置AppStore(){
常数reduxSagaMonitorOptions={
onError:(错误,{sagaStack})=>{
//console.log(错误,sagaStack);
}
};
const sagaMiddleware=createSagaMiddleware(reduxSagaMonitorOptions);
const{run:runSaga}=sagaMiddleware;
//使用saga中间件创建存储
const middleware=[sagaMiddleware];
常量增强子=[
createInjectorsEnhancer({
createReducer,
runSaga
})
];
常量存储=配置存储({
reducer:createReducer(),
中间件:[
…获取默认中间件({
序列化检查:{
IgnoredActionPath:['payload.history']
},
不可变检查:false
}),
…中间商
],
开发工具:
process.env.NODE_env!=“生产”
||process.env.PUBLIC_URL.length>0,
增强剂
});
//使减速器可热重新加载,请参阅http://mxs.is/googmo
如果(模块热){
模块.hot.accept('./减速机',()=>{
力减速机(仓库);
});
}
退货店;
}
export const store=configureAppStore();

一种解决方案是-

  • 为每一个“注入减速器”定义一个“注入传奇”,该减速器受到“注销”操作的影响
  • 在这样定义的“注入的传奇”中,定义注入的还原剂特有的清理行动,同时观察“注销”行动
  • 因此,在理论上,当“注销”操作被调度时,所有如上定义的注入saga将运行清理操作,从而在各个还原器中生成注销等效切片
  • 试试这个,这个会解决问题的

    已更新::

    为了避免为所有其他相关组件/切片创建传奇,有一点不同

    工作原型-

    选民们,也在这里用评论分享你们的观点。这也是我目前为止找到的唯一解决方案。但它很麻烦,因为我的应用程序中有太多的切片。更新后的答案应该会有所帮助,在这种情况下@Prateekyes起作用了,我确实需要向所有必需的还原程序添加注销操作。但还是比把它加到每个人身上好多了,谢谢