Я прочитал эту статью 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 поддерживает объектно-ориентированное программирование.
Вы можете сделать так
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))