Фон
У меня есть хранилище NGRX для поиска следующим образом:
export interface State {
field: string;
operator: string;
criteria: string;
offset: number;
limit: number;
}
И так как у меня многократное использование поиска, я создаю несколько экземпляров этого состояния поиска в своем основном состоянии.объект:
// In index.ts
export interface State {
search: {
main: searchReducer.State;
other: searchReducer.State;
};
}
И параметризованный селектор, чтобы получить правильный:
export const chooseSearchInstance = (instance: string): ((state: State) => searchReducer.State) => {
switch(instance) {
case 'MAIN': {
return getMainSearchState;
}
case 'OTHER': {
return getOtherSearchState;
}
}
};
Вопрос
Я пытаюсь реализовать некоторые нумерации страниц в поиске, поэтому мне нужноиспользовать вышеупомянутый селектор в Эффекте, чтобы узнать, является ли это тем же самым поиском или нет.Однако, поскольку «withLatestFrom» принимает только дополнительный источник Observable, а не обратный вызов, я не уверен, как бы я указал его в Effect?
@Effect()
public searchItems: Observable<Action> = this.actions.pipe(
ofType<searchActions.PerformSearchAction>(searchActions.PERFORM_SEARCH),
withLatestFrom(this.store.select(rootReducers.chooseSearch( action.payload.instance)), // <-- Cannot do this since there is no access to action at this point.
switchMap(([action, searchState] => (/* ... */))
);
Я также попытался использовать mergeMap, который использовал this.store.select, но это вызвало бесконечный цикл, потому что этот эффект приводит к изменению состояния, которое вызывает селектор в mergeMap.
Так как же мне получить конкретный экземпляр состояния поиска для использования в этом эффекте?(Полагаю, я также приму ответы, в которых говорится, что вся эта идея экземпляра неверна, если есть лучший способ представить разные экземпляры одного и того же типа состояния).