Porównaj ceny domen i usług IT, sprzedawców z całego świata

ngrx: jak przekazać parametry do selektora wewnątrz metody createSelector


Mam w sklepie bardzo prosty stan:
const state = {
records: [1,2,3],
};

Mam selektor do wpisów:
export const getRecords = createSelector(getState, (state: State) => state.records));

A teraz chcę mieć oddzielne selektory do pobierania każdego rekordu według indeksu.
W tym celu chcę stworzyć jeden uniwersalny selektor z takimi rekwizytami:
export const getRecordByIndex = createSelector(getRecords,
(state: State, { index }) => state.records[index]),);

Następnie utwórz kilka konkretnych selektorów, np .:
export const getFirstRecord = createSelector(getRecordByIndex(/* somehow pass index = 0 to this selector */),
(firstRecord) => firstRecord),);

Ale nie znalazłem żadnej wzmianki o przekazywaniu parametrów do selektorów właściwości, gdy używamy ich wewnątrz metody createSelector. Czy to możliwe?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Z tego posta na blogu:

https://medium.com/angular-in- ... 529f8
https://medium.com/angular-in- ... 9f8Od NgRx 6.1 selektory akceptują również dodatkowy argument props. Który
oznacza to, że możesz teraz zdefiniować taki selektor:

export const getCount = createSelector( getCounterValue, 
(counter, props) => counter * props.multiply);this.counter = this.store.pipe( select(fromRoot.getCount, { multiply: 2 }));

Ach ... ale czytając ponownie swoje pytanie, pytasz, jak zbudować kolejny selektor, który używa tego selektora? Powyższy artykuł sugeruje zbudowanie funkcji fabrycznej.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Używam
"@ ngrx/entity": "7.2.0"
i widzę, że właściwości są przekazywane do każdego selektora, na przykład w moim komponencie, który wywołuję:
this.isActive$ = this.store.pipe(select(fromClient.isActive, { id: 'someid' }));

A potem w moim reduktorze mam:
export const getClientState = createFeatureSelector<ClientState>('client');export const getClient = createSelector( getClientState,
(state, props) => {
// do something with props.id to get the client then:
return state;
});export const isActive: = createSelector( getClient,// props are passed to here
(state: any) => {// i don't add the props argument here, as i don't need them
return state.isActive;
});
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Z funkcji projektora można korzystać:
export interface Record {
// Some sort of record interface
}export interface State {
records: Record[];
}export const getRecords = createSelector( getState,
(state: State): Record[] => state.records));export const getRecordByIndex = createSelector( getRecords,
(records: Record[], { index }) => records[index]),);export const getFirstRecord = createSelector( getRecords,
(records: Record[]) => getRecordByIndex.projector(records, { index: 0 }));

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się