2

我的商店包含以下减速器:

export const centralStampState = {
  layoutState : layoutReducer, //this one is not initialized
  eventTabState : eventTabReducer,
  eventTimelineState: eventTimelineReducer,
  eventWorkflowState : eventWorkflowReducer,
  displayLayerState : displayLayerReducer,
  treeState : TreeReducer
}

问题是Angular初始化了所有reducers,layoutState在触发第一个动作后只有一个''被初始化(这会导致访问undefined Object)。

我对所有减速器和状态都遵循相同的实现,但我没有弄清楚这种奇怪行为的原因。

下面是Store初始化后第一次action后的状态 在此处输入图像描述

在此处输入图像描述

对于所有减速器,我的实现都是相同的。

export function layoutReducer(state: LayoutState = INITIAL_LAYOUT_STATE, action: Action) : LayoutState{
  switch (action.type){
    case UPDATE_SPLIT_CONFIG_DIMENSION :
      return updateSplitConfigDimension(state, action);
    case DISABLE_SPLIT_CONFIGURATION:
      return state;
    case UPDATE_SPLIT_AREA_VISIBILITY :
      return state;
    case RESTORE_DEFAULT_CONFIG_LAYOUT :
      return state;
  }
}

export function eventTabReducer(state: EventTabState = EVENT_TAB_INITIAL_STATE, action: CSAction): EventTabState {
  switch (action.type) {
    case LOAD_SUPPORTED_REPORT_FIELDS:
          return state;
    default:
      return state;
  }
}
4

1 回答 1

9

我找到了,如果是 JAVA 而不是 Typescript,代码根本无法编译!!!!!!!!!

我错过了defaultswitch 案例中的语句,当 Angular 处理该操作@ngrx/store/init时,它将忽略此操作,并且如果 Angular 没有找到默认语句layoutReducer,它似乎会返回。undefined

export function layoutReducer(state: LayoutState = INITIAL_LAYOUT_STATE, action: Action) : LayoutState{
  switch (action.type){
    case UPDATE_SPLIT_CONFIG_DIMENSION :
      return updateSplitConfigDimension(state, action);
    case DISABLE_SPLIT_CONFIGURATION:
      return state;
    case UPDATE_SPLIT_AREA_VISIBILITY :
      return state;
    case RESTORE_DEFAULT_CONFIG_LAYOUT :
      return state;
    default:
      return state;// with this Angular can perform the ngrx init action
  }
}
于 2017-11-14T16:25:22.583 回答