Я использую Angular 5, ngrx / store.У меня есть эффект:
@Effect()
updateAfterChanges$ = this.actions$.pipe(
ofType(ActionTypes.ChangesInItems),
withLatestFrom(
this.store.select(fromReducers.getItemsList)
),
switchMap(([action, itemsList]: [ActionType, Items[]]) => {
return [new UpdateItems()]
})
)
getItemsList
выглядит так:
export const getItemsList= createSelector(
fromAnotherReducer.getAllItems,
getCurerntItemdId,
(allItems, itemId) => collectItems(allItems, allItems[itemId].subItems)
);
Этот селектор вызывается на совершенно другой странице - page1
.Где у меня нет предметов вообще.Элементы загружаются с сервера, когда я открываю окно модели на page2
.Так что на page1
я получаю ошибку Cannot read property 'subItems' of undefined
.Почему этот селектор даже не вызывается после ofType(ActionTypes.ChangesInItems)
?Я должен добавить проверку в селекторе:
Object.keys(allItems).length !== 0 ?
collectItems(allItems, allItems[itemId].subItems) : []
Почему это происходит?Я не хочу добавлять проверки в каждый селектор, который использует динамически загружаемые данные.Я ожидаю, что эффект будет вызван только в ответ на ofType(ActionTypes.ChangesInItems)