Angular Ngrx存储:在ActionReducerMap之外更新公共状态
我有一个ngrx存储,其初始状态类似于:Angular Ngrx存储:在ActionReducerMap之外更新公共状态,angular,ngrx,ngrx-store,ngrx-effects,Angular,Ngrx,Ngrx Store,Ngrx Effects,我有一个ngrx存储,其初始状态类似于: const state = { child1: {...}, child2: {...}, } 使用ActionReducerMap,如下所示: const reducerMap = { child1: reducer1, child2: reducer2, } const state = { child1: {...}, child2: {...}, loading: false, }
const state = {
child1: {...},
child2: {...},
}
使用ActionReducerMap,如下所示:
const reducerMap = {
child1: reducer1,
child2: reducer2,
}
const state = {
child1: {...},
child2: {...},
loading: false,
}
StoreModule.forFeature('myStore', compose(metaReducer, combineReducers)(reducerMap))
现在,我想在与child1和child2相同的级别上添加一个“加载”状态,以跟踪两个子系统(它们是相互连接的)的加载。为此,我更新了初始状态,如下所示:
const reducerMap = {
child1: reducer1,
child2: reducer2,
}
const state = {
child1: {...},
child2: {...},
loading: false,
}
StoreModule.forFeature('myStore', compose(metaReducer, combineReducers)(reducerMap))
我尝试使用metareducer,它位于reducer1和reducer2的顶部,如下所示:
export function metaReducer(reducer) {
return function reduce(state, action) {
switch(action.type) {
case CommonActionTypes.UpdateLoading: {
return {
...,
loading: action.loading
}
}
default:
return reducer(state, action);
}
}
}
我将其添加到功能存储中,如下所示:
const reducerMap = {
child1: reducer1,
child2: reducer2,
}
const state = {
child1: {...},
child2: {...},
loading: false,
}
StoreModule.forFeature('myStore', compose(metaReducer, combineReducers)(reducerMap))
在应用程序中,我在更新child1和child2的某些效果期间调用UpdateLoading操作。
然而,这并不像我预期的那样有效
使用meta reducer更新公共状态是正确的方法吗?我如何才能做到这一点?尝试在两种情况下使用reducer功能:
导出功能元减速器(减速器){
返回函数reduce(状态、动作){
开关(动作类型){
案例CommonActionTypes.UpdateLoading:{
返回reducer({/尝试在两种情况下使用reducer函数:
导出功能元减速器(减速器){
返回函数reduce(状态、动作){
开关(动作类型){
案例CommonActionTypes.UpdateLoading:{
return reducer({//IMO,meta reducer用于在调用reducer之后/之前添加/检查行为。例如,检查不变性。如果您希望在多个状态更改中保留(或不删除)切片,我认为您必须为其创建单独的reducer:StoreModule.forRoot({loading:loadingReducer})
IMO,元减速器用于在调用减速器之后/之前添加/检查行为。例如,检查不变性。如果您希望在多个状态更改中保留(或不删除)切片,我认为您必须为其创建单独的减速器:StoreModule.forRoot({loading:loadingReducer})