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