微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要帮助理解这个 Ngrx 效果

如何解决需要帮助理解这个 Ngrx 效果

Ngrx 文档,用于使用从商店中选择的状态的效果 状态(无双关语)

Note: For performance reasons,use a flattening operator like concatMap to prevent the
selector from firing until the correct action is dispatched.

...并提供示例:

    addBookToCollectionSuccess$ = createEffect(() => this.actions$.pipe(
      ofType(CollectionApiActions.addBookSuccess),concatMap(action => of(action).pipe(
          withLatestFrom(this.store.select(fromBooks.getCollectionBookIds))
      )),tap(([action,bookCollection]) => console.log('whatever'))
      ),{ dispatch: false }
    );

此示例已更改为使用 concatLatestFrom,但这在这里并不重要。我感兴趣的是理解最初的建议。我想我理解意图,以避免除了源操作触发时 withLatestFrom 处理结果,但我不明白为什么解决方案需要将 getCollectionBookIds 包装在使用 withLatestFrom 手动构建的 Observable。像这样的东西会不会同样有效且更具可读性?

of(action)

我对 Rxjs 的理解不是很好,在尝试解决这个问题几天后,我怀疑我仍然遗漏了一些东西。

解决方法

如果您只需要选定状态,您的建议应该可以正常工作:

concatMap(() => this.store.select(selectSelectedBookIds).pipe(first())),

但是,如果您还需要操作本身,以下将传递一个包含操作和您选择的状态的数组:

concatMap(action => of(action).pipe(
  withLatestFrom(this.store.select(fromBooks.getCollectionBookIds))
)),

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。