Правильно выбрать часть состояния из магазина - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу подписаться на часть состояния в магазине ngrx и получать выбросы только тогда, когда эта конкретная часть состояния изменяется.

export const getMatchesState = (state: State) => state.matches;

export const getSpainMatches = createSelector(getMatchesState, (allMatches) => {
  return Object.keys(allMatches.byId)
    .filter(key => {
      return allMatches.byId[key].tournamentId == '68';
    }).map(key => allMatches.byId[key]);
});

при подпискена этот лайк

this.testSub = this.store.pipe(select(fromRoot.getSpainMatches))
      .subscribe(s => console.log('@@@@', s));

Я получаю выбросы каждый раз при изменении любого совпадения из магазина, а не только при изменении совпадения в Испании.

Обновление:

Я тоже пробовал это:

export const getSpainMatches = createSelector(getMatchesState, (allMatches, props) => {
  return Object.keys(allMatches.byId)
    .filter(key => {
      return allMatches.byId[key].tournamentId == props.tournamentId ;
    }).map(key => allMatches.byId[key]);
});
this.testSub = this.store.pipe(select(fromRoot.getSpainMatches, {tournamentId: 68}))
      .subscribe(s => console.log('@@@@', s));

Спасибо

1 Ответ

0 голосов
/ 07 ноября 2019

Вы можете попробовать где-нибудь где-то использовать DifferentUntilChanged ... возможно, в вашей подписке.

this.testSub = this.store.pipe(distinctUntilChanged(), select(fromRoot.getSpainMatches))
      .subscribe(s => console.log('@@@@', s));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...