Angular ngrx store Параметризованные запоминаемые селекторы

Я прочитал эту статью https://blog.angularindepth.com/ngrx-параметризованный-селектор-e3f610529f8

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

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

[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)
  },
};

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

🤔 А знаете ли вы, что...
JavaScript поддерживает объектно-ориентированное программирование.


2
1 498
2

Ответы:

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

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

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


Решено

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

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

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

(counter, props) => layoutSelectors.preferences(props.counter))