Насколько я могу судить, у вас есть 3 основные части для работы (companies
, responses
и filter
), и когда одна из этих частей изменяется (например, выдает новое значение), вы хотели бы пересчитать данные, основываясь на том, что изменилось.
Если это так, и предположить, что состояние вашего приложения поддерживается в единственном источнике правды , вот как я бы это сделал:
const companies$ = this.store.select(companyFilesSelector);
const accessibleResponses$ = this.store.select(responsesSelector);
const activeFilter$ = this.store.select(activeFilterSelector);
const data$ = combineLatest(
companies$,
accessibleResponses$,
activeFilter$,
).pipe(
map(([companies, responses, filter]) => {
// Logic here...
})
)
combineLatest
используется здесь, потому что вы хотите вычислять показанные данные всякий раз, когда изменяется одна из 3 частей.
Итак, если ваше начальное состояние может быть:
{
companies: [],
responses: [],
activeFitler: null,
}
Каждый раз, когда вы добавляете, например, некоторые новые компании, функция, предоставляемая для map
, будет вызываться для обновления того, что будет показано пользователю в зависимости от новых компаний. То же самое происходит, когда вы добавляете новый responses
или новый filter
.
Редактировать
Могу ли я использовать SwitchMap из этого, чтобы никакая подписка не смотрела в этом магазине потенциально сэкономить память?
Я не думаю, что это экономит много памяти, поскольку все, что switchMap
делает, чтобы отписаться от активной наблюдаемой и создать новую, основываясь на недавно прибыл значение и функция .
Кроме того, поскольку вы подписываетесь на хранилище, первое получение данных должно происходить синхронно , поскольку я полагаю, что хранилище является своего рода BehaviorSubject
(например, NgRx)