@ ngrx / entity `Не удается прочитать идентификаторы свойств 'undefined` при использовании вместе с @ ngrx / store? уже учитывает собственные идентификаторы при определении адаптера - PullRequest
2 голосов
/ 02 октября 2019

Я посмотрел на 2 других поста, касающихся этого, один с переносом вокруг большего состояния не применяется, в то время как другой с регистрацией нескольких forFeature - я провел некоторое тестирование вокруг этого, и даже если я импортирую его раньшеили после forRoot (редукторы) в моем app.module, это не имеет значения.

Я уверен, что упускаю что-то очевидное в конфигурации.

Моя конфигурация:

export const orderAdapter: EntityAdapter<IOrder> = createEntityAdapter<IOrder>({
  selectId: (order: IOrder) => order._id
});

export interface AllOrdersState extends EntityState<IOrder> {}

export const initialState: AllOrdersState = orderAdapter.getInitialState({
  ids: [],
  entities: {}
});

export const OrdersState = createFeatureSelector<AllOrdersState>('orders');

export const {
  selectIds,
  selectEntities,
  selectAll,
  selectTotal
} = orderAdapter.getSelectors(OrdersState);

Мой фактический редуктор:


export function ordersReducer(
  state: AllOrdersState = initialState,
  action: actions.OrdersActions
) {
    case actions.CREATE_MANY: {
      console.log(action.orders);
      return orderAdapter.addMany(action.orders, state);
    }
}

Я регистрируюсь в своем Order.Module как:

    StoreModule.forFeature('orders', ordersReducer),

Моя основная карта редуктора:

const reducers: ActionReducerMap<AppState> = {
  order: orderReducer,
  admin: adminReducer,
  tlabs: tlabsReducer,
  reports: reportsReducer,
  settings: settingsReducer,
  orders: ordersReducer
};

Затем основной импорт в app.module:

    StoreModule.forRoot(reducers),

Попытка чтения сущностей:

Конструктор:

 private store: Store<AppState>

Фактическая функция:

this.store
      .select(ordersReducer.selectAll)

Откуда берется этот импорт:

import * as ordersReducer from '../../../../../store/reducers/orders.reducer';

1 Ответ

1 голос
/ 02 октября 2019

Похоже, он пытается прочитать из OrdersState до того, как он был инициализирован. Ваш редуктор фактически не возвращает состояние по умолчанию для его инициализации;По крайней мере, в коде, который вы предоставляете, кажется, нет.

Заставьте ваш редуктор вернуть состояние по умолчанию.

export function ordersReducer(
  state: AllOrdersState = initialState,
  action: actions.OrdersActions
) {
    case actions.CREATE_MANY: {
      console.log(action.orders);
      return orderAdapter.addMany(action.orders, state);
    }

    return state // Here you should return the default state

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...