ngrx - 嵌套减速器
ngrx - Nesting reducers
我正在尝试将 "workspace" 功能实现到 Angular ngrx 4 网络应用程序中,允许用户拥有同一应用程序的多个状态,他可以通过 ui 在这些状态之间切换屏幕上的元素。我将如何在我的减速器状态下实现它?
目前我的 rootReducer 看起来像这样:
export const reducers: ActionReducerMap<State> = {
layout: fromLayout.layoutReducer,
properties: fromProperties.propertiesReducer,
grid: fromGrid.gridReducer
}
现在我想嵌套这些,这样我就可以通过切换工作区来改变整个状态。
说我想切换一个工作区我不能在任何当前的减速器中添加这个 workspaceReducer。它必须是当前 ActionReducerMap 的父级(至少我这么认为)。
在 ngrx 中实现类似的最佳实践是什么。 T
你或许可以使用 meta-reducer:
export const SWITCH_WORKSPACE = 'SWITCH_WORKSPACE';
export function switchWorkspace( reducer ) {
return function newReducer( state, action ) {
if ( action.type === SWITCH_WORKSPACE ) {
state = getWorkspaceState(action.workspace);
}
const nextState = reducer(state, action);
return nextState;
}
}
在您的应用模块中:
StoreModule.forRoot(reducers, {
metaReducers: [switchWorkspace]
}),
有关 meta-reducer 的详细信息,请参阅 https://netbasal.com/implementing-a-meta-reducer-in-ngrx-store-4379d7e1020a
我正在尝试将 "workspace" 功能实现到 Angular ngrx 4 网络应用程序中,允许用户拥有同一应用程序的多个状态,他可以通过 ui 在这些状态之间切换屏幕上的元素。我将如何在我的减速器状态下实现它?
目前我的 rootReducer 看起来像这样:
export const reducers: ActionReducerMap<State> = {
layout: fromLayout.layoutReducer,
properties: fromProperties.propertiesReducer,
grid: fromGrid.gridReducer
}
现在我想嵌套这些,这样我就可以通过切换工作区来改变整个状态。
说我想切换一个工作区我不能在任何当前的减速器中添加这个 workspaceReducer。它必须是当前 ActionReducerMap 的父级(至少我这么认为)。
在 ngrx 中实现类似的最佳实践是什么。 T
你或许可以使用 meta-reducer:
export const SWITCH_WORKSPACE = 'SWITCH_WORKSPACE';
export function switchWorkspace( reducer ) {
return function newReducer( state, action ) {
if ( action.type === SWITCH_WORKSPACE ) {
state = getWorkspaceState(action.workspace);
}
const nextState = reducer(state, action);
return nextState;
}
}
在您的应用模块中:
StoreModule.forRoot(reducers, {
metaReducers: [switchWorkspace]
}),
有关 meta-reducer 的详细信息,请参阅 https://netbasal.com/implementing-a-meta-reducer-in-ngrx-store-4379d7e1020a