Угловой NGXS диспетчерский вызов подписаться несколько раз - PullRequest
0 голосов
/ 14 февраля 2019

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

При нажатии кнопки я отправляю

appStore.dispatch(new SetSearch(value));

Я показываю в другом компоненте

appStore.select<ISearch>(AppState.Search)
    .pipe(
      takeUntil(this.unsubscribe$), skip(1)
    )
      .subscribe(SearchState => {
        if (SearchState.account !== '') 

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

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Прочтите этот выпуск https://github.com/ngxs/store/issues/477

и посмотрите пример здесь https://stackblitz.com/edit/angular-gxh1sr

0 голосов
/ 14 февраля 2019

Ваши вложенные подписки должны создавать цикл выполнения из-за изменений в состоянии, которые вводятся, возможно, повторяются, а затем цикл заканчивается из-за отсутствия изменений в значении.Если вы отправляете дополнительные действия внутри этой подписки, эти действия могут повлиять на состояние appStore и, следовательно, повторно запустить текущую подписку для повторного выполнения.В этом случае вы будете наблюдать несколько подписок, пока ваш магазин больше не будет реагировать на дополнительные изменения состояния.Тип операции, происходящей в редукторе, определяет продолжительность этого цикла.Если вы устанавливаете поле и изменяете его значение, то вы можете увидеть две отправки, поскольку appStore изменится с начального значения на новое значение, и из-за отправки, вложенной в подписку, вы увидите несколько событий подписки.Если вы используете какую-то другую форму мутации на редукторе во время диспетчеризации, у вас могут быть более длинные циклы выполнения.Способ смягчить это - сравнить ваше состояние и не запускать дополнительные рассылки, если ваше состояние уже находится в правильном формате.Это то, что вы можете добавить еще одну структуру условного контроля в качестве средства правовой защиты.

Также как дополнение, если у вас есть эффекты, которые реагируют на рассылку, то это может также вызвать дополнительные события подписки, что приводит к дальнейшим цикламоформление внутри вашей подписки.Особенно, если вы используете традиционные рассылки исполнения подписки. REQUEST -> эффект рассылки {SUCCESS |ОШИБКА} действия, которые также изменяют ваше состояние, например поле загрузки или флаг ошибки.

...