首页 > 解决方案 > 防止特定选择器在分派新操作时发出值的技巧?

问题描述

在同一个组件中,我有以下代码:

this.store.select(state => state.someProperty)).pipe(
        takeUntil(this.destroy$),
        // distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))
      ).subscribe(val => {
        dosomething()
      })

在同一个组件中,我有存储操作来触发一个新值。


this.store.dispatch(
            someAction({
              payload: {
                value
              }
            }));

如果触发以下操作,我不希望上面的订阅发出值,我知道这不是常见的要求,也不是内置的支持,也不是阻止特定商店选择器发出值的正确模式,但我从具体情况。

我曾尝试在发送该操作之前触发特定令牌,例如

this.storeToken$.next('Hey, some one please don't emit following action')
this.store.dispatch(
            someAction({
              payload: {
                value
              }
            }));

并在订阅选择器时尝试一些 rxjs 技巧:

race(this.store.select(state => state.someProperty).pipe(
      delay(100)), this.storeToken$)

我想过滤掉令牌,但它永远不会起作用。商店选择者总是赢得比赛,

请问有人有想法吗?

标签: angularreduxngrxngrx-store

解决方案


您可以使用take运算符获取第一个值。如果您需要更具体,请使用distinct 运算符之一或filter.

this.store.select(state => state.someProperty).pipe(take(1))

推荐阅读