Angular store.select().subscribe()返回意外的';减速器';状态数据结构中的属性

Angular store.select().subscribe()返回意外的';减速器';状态数据结构中的属性,angular,ngrx,Angular,Ngrx,我刚开始通过一个教程来尝试NGRX。到目前为止,一切似乎都正常,只是我的状态数据结构不知何故被破坏了,我根本找不到位置和方式 我的减速机是这样的: import * as fromRoot from '../../../state/app.state'; import { createFeatureSelector, createSelector } from '@ngrx/store'; export interface State extends fromRoot.State { cr

我刚开始通过一个教程来尝试NGRX。到目前为止,一切似乎都正常,只是我的状态数据结构不知何故被破坏了,我根本找不到位置和方式

我的减速机是这样的:

import * as fromRoot from '../../../state/app.state';
import { createFeatureSelector, createSelector } from '@ngrx/store';

export interface State extends fromRoot.State {
  criteriaLock: CriteriaLockState;
}

export interface CriteriaLockState {
  storeNames: string[];
  selectedStoreName: string;
}

const initialState: CriteriaLockState = {
  storeNames: [],
  selectedStoreName: ''
};

const getCriteriaLockFeatureState =  createFeatureSelector<CriteriaLockState>('criteria-lock');

export const getStoreNames = createSelector(
  getCriteriaLockFeatureState,
  state => state.storeNames
);

export const getSelectedStoreName = createSelector(
  getCriteriaLockFeatureState,
  state => state.selectedStoreName
);

export function reducer(state = initialState, action): CriteriaLockState {
  switch (action.type) {
    case 'SET_STORE_NAMES':
      return {
        ...state,
        storeNames: action.payload
      };
    case 'SET_SELECTED_STORE_NAME':
      return {
        ...state,
        selectedStoreName: action.payload
      };
    default:
      return state;
  }
}
CriteriaLock未定义,因为接收的数据结构未定义

criteria-lock: {
 selectedStoreName: ''
}
但是

这意味着reducer函数以某种方式出现在state对象中。 这不是正确的行为,对吗? 当我想访问订阅中的状态时,我必须将选择器更改为

export const getStoreNames = createSelector(
  getCriteriaLockFeatureState,
  state => state.**reducer**.storeNames
);
我不知道我是如何将该属性粘贴到州结构中的,我也从未见过任何人有相同的问题。在将State对象记录到Reducer中时,我收到了正确的状态。只有在这里我才得到这个减速机对象。这似乎不正确,因为教程从未提到过类似的内容

我通过以下方式设置店铺名称:

this.store.dispatch({
      type: 'SET_SELECTED_STORE_NAME',
      payload: storeName
    });
并将StoreModule添加到我的CriteriaLockModule中

imports: [
    CommonModule,
    SharedModule,
    FormsModule,
    StoreModule.forFeature('criteria-lock', { reducer })
  ]

我修正了它:

问题是从模块导入时,减速机周围存在父级问题

imports: [
    CommonModule,
    SharedModule,
    FormsModule,
    StoreModule.forFeature('criteria-lock', **{ reducer }**)
  ]
应该是

imports: [
    CommonModule,
    SharedModule,
    FormsModule,
    StoreModule.forFeature('criteria-lock', **reducer**)
  ]
那只花了我3个小时:D


imports: [
    CommonModule,
    SharedModule,
    FormsModule,
    StoreModule.forFeature('criteria-lock', **{ reducer }**)
  ]
imports: [
    CommonModule,
    SharedModule,
    FormsModule,
    StoreModule.forFeature('criteria-lock', **reducer**)
  ]