ngrx/store 初始化存储无法正常工作
ngrx/store init store is not working properly
我的商店包含以下减速器:
export const centralStampState = {
layoutState : layoutReducer, //this one is not initialized
eventTabState : eventTabReducer,
eventTimelineState: eventTimelineReducer,
eventWorkflowState : eventWorkflowReducer,
displayLayerState : displayLayerReducer,
treeState : TreeReducer
}
问题是 Angular 初始化了所有的 reducer,只有一个 'layoutState
' 在触发第一个动作后被初始化(这导致访问 undefined
Object
).
我对所有的 reducer 和状态都遵循相同的实现,但我没有弄清楚这种奇怪行为的原因。
下面是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;
}
}
我找到了,如果它是 JAVA 而不是 Typescript,代码将根本无法编译!!!!!!!!!
我在 switch case 中遗漏了 default
语句,当 Angular 正在处理操作 @ngrx/store/init
时,layoutReducer
将忽略此操作并且似乎如果找不到默认语句,Angular 将 return 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
}
}
我的商店包含以下减速器:
export const centralStampState = {
layoutState : layoutReducer, //this one is not initialized
eventTabState : eventTabReducer,
eventTimelineState: eventTimelineReducer,
eventWorkflowState : eventWorkflowReducer,
displayLayerState : displayLayerReducer,
treeState : TreeReducer
}
问题是 Angular 初始化了所有的 reducer,只有一个 'layoutState
' 在触发第一个动作后被初始化(这导致访问 undefined
Object
).
我对所有的 reducer 和状态都遵循相同的实现,但我没有弄清楚这种奇怪行为的原因。
下面是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;
}
}
我找到了,如果它是 JAVA 而不是 Typescript,代码将根本无法编译!!!!!!!!!
我在 switch case 中遗漏了 default
语句,当 Angular 正在处理操作 @ngrx/store/init
时,layoutReducer
将忽略此操作并且似乎如果找不到默认语句,Angular 将 return 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
}
}