在我的Angular 项目中,我有这个ngrx效果,它触发了一个新的SearchAction:

createSearchWithNewLimit$ = createEffect(() => {
    return this.actions$.pipe(
      ofType(pageLimitChangedAction),
      concatLatestFrom(() => [this.store.select(selectSearchParams)]),
      switchMap(([{limit}, currSearchParams]) => {
        if(currSearchParams) {

          const searchParams = { ...currSearchParams, limit};

          return of(searchAction({searchParams}));
        }
        return EMPTY;
      })
    )
  })

此外,SearchAction Reducer更新处于状态(在this.store.select(selectSearchParams)中以此效果检索的状态)中的earchParam.

这是否意味着每次调度SearchAction时都会触发此效果,因为它使用的是this.store.select(selectSearchParams)?如果是这样的话,这怎么会不导致无限循环呢?或者它只判断一次? 谢谢

推荐答案

concatLatestFrom从存储中读取当前值,并将该值传递给下一个操作符.当它的值被改变时,它不会重新触发效果.

它与RxJS的withLatestFrom操作符相当,区别在于concatLatestFrom是延迟计算的.

欲了解更多信息,请参阅文档:

注意:出于性能原因,请使用像linatLatestFrom这样的展平运算符,以防止 Select 器触发,直到调度正确的操作.

Angular相关问答推荐

根据Angular中的构建来卸载独立组件

如何取消针叶林输入的自动填充?

Angular 动画—淡出适用于DIV,不完全适用于子组件

PrimeNG侧栏清除primeNG消息.为什么?

如何用Effect()识别正确的Angular 信号?

如何在滑动滑块中获取当前项目的索引?

图像未显示在视图屏幕上-Angular 投影

当嵌套在异步容器中时,S会阻止具有动态值的ionic 段工作吗?

RxJS轮询+使用退避策略重试

Angular 组件存储,为什么我的效果可以';在http错误后不会被触发?

如何捕获生命周期方法中抛出的Angular组件错误?

如何在 Angular RxJS 中替换订阅中的 subscrib?

Observable转换为Observable

对象中的值丢失 angular ngrx

在组件级别加载 JS 脚本(不在启动时)

导航到同一条route路由不刷新组件?

在Angular2的 Select 列表中设置最初 Select 的项目

Angular 2 应用程序中没有Access-Control-Allow-Origin标头

如何在 angular2 中的 div 的 contenteditable 上使用 [(ngModel)]?

Angular单元测试输入值