Угловой магазин ngrx Параметризованные запомненные селекторы - PullRequest
0 голосов
/ 21 мая 2019

Я прочитал эту статью https://blog.angularindepth.com/ngrx-parameterized-selector-e3f610529f8

И не нашел, как адаптироваться для передачи параметров в мои селекторы

Я попытался передать объект props в мой компонент в селектор.

[EDITED] ответ с решением @Julius Dzidzevičius.

в компоненте

this.store.pipe(select(fromRoot.selectors.getPreferences, 'myProps'))

в AppState

const rootSelectors = {
  layout: (state: AppState) => _.get(state, 'layout'),
}

export interface Selectors {
  getPreferences: MemoizedSelectorWithProps<AppState, string, Preference[]>;
}

export const selectors: Selectors = {
  getPreferences: createSelector(
      rootSelectors.layout,
      (state: LayoutState, props: string) 
=> layoutSelectors.preferences(state, props)) 
};

в состоянии

export const layoutSelectors = {
  preferences: (state: LayoutState, props: string) => {
    return state.filter(item => item.name === props)
  },
};

Если бы кто-то мог сказать мне, как правильно адаптировать этот параметр.от компонента к селектору через запомненный селектор.

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Параметры мемоизированного селектора хранятся в свойстве props. Здесь:

(counter) // should be somewhere else but don't know how :(
=> layoutSelectors.preferences(counter))

counter - это значение, полученное из rootSelectors.layout. Не могу сказать, что за этим стоит или какова ваша цель, но получить доступ к реквизитам в селекторе:

(counter, props) => layoutSelectors.preferences(props.counter))
0 голосов
/ 21 мая 2019

Вы можете сделать это

export const getUserById = (userId: string) => createSelector(
    getUserList,
    idList => IdList.filter(id => id === userId)
);

Пожалуйста, дайте мне знать, если у вас все еще есть проблема

...