Rxjs 具有可观测值的调度动作

Rxjs 具有可观测值的调度动作,rxjs,ngrx,Rxjs,Ngrx,我经常发现自己在使用以下代码: export class Component implements OnDestroy { private subscription: Subscription; user: string; constructor(private store: UserStore) { this.subscription = store.select(fromUsers.getUser) .subscribe(user => this.

我经常发现自己在使用以下代码:

export class Component implements OnDestroy {

  private subscription: Subscription;

  user: string;

  constructor(private store: UserStore) {
    this.subscription = store.select(fromUsers.getUser)
      .subscribe(user => this.user = user);
  }

  ngOnDestroy(): void {
    this.subscription.unsubscribe();
  }

  logout(): void {
    this.store.dispatch({
      type: LOGOUT,
      payload: {
        user: this.user
      }
    })
  }
}
如您所见,我需要将用户字符串存储为组件中的成员,以便将其与有效负载一起发送

我宁愿使用用户字符串作为可观察对象,并使用异步管道


在分派操作时,我需要如何更改代码以利用用户的可观察性而不将其存储在成员变量中?

您可以使用ngrx效果并增强当前用户的注销命令

@Effect() logoutEffect$ = this.actions$
  .ofType(LOGOUT)
  .withLatestFrom(this.store$)
  .map(([action: Action, storeState: AppState]) => {
     return storeState.getUser;
   })
  .map(payload => ({type: 'LOGOUT_USER', payload}))

用户注销操作和用户从存储区注销之间没有连接。我认为你不应该/不能把它们联系起来。你能解释一下为什么没有联系吗?如果没有用户,注销将无法工作。谢谢这项工作,我将接受这一回答。我也考虑过这种方法,但我没有考虑它,因为actions负载在发送时并不代表状态。这可能会导致我想重播或撤消操作的问题,因为状态是从效果中提取的,并且不在操作本身中表示。