Ngrx-单独的效果还是结合了api调用?

时间:2020-10-12 17:30:43

标签: angular rxjs ngrx

关于ngrx效果,我有一个与设计相关的问题。在我的项目中,我们有两个单独的API,一个用于获取当前用户,另一个用于获取用户设置。因此,成功登录后,我需要同时获取当前用户和用户设置。我创建了两个单独的操作(以及用于处理这些操作的相应效果)-getCurrentUser和getCurrentUserSettings,它们在成功获得登录响应后最终修改了商店中的currentUser和userSettings属性的值:-

loginSuccess$ = createEffect(() =>
  this.actions$.pipe(
    ofType(LoginSuccessAction),
    switchMap(() => [getCurrentUserAction(), getUserSettingsAction()]),
    tap(() => {
      this.router.navigateByUrl('/dashboard');
    })
  )
);

同样,在我的应用程序组件的ngOnInit函数中,我分别分派了getCurrentUsergetUserSettings操作,以便在重新加载页面时不会丢失应用程序状态:-

ngOnInit(): void {
  this.store.dispatch(getCurrentUserAction());
  this.store.dispatch(getUserSettings());
}

仅创建一个名为getCurrentUserDetails的操作更好,其效果就是使用forkJoin运算符调用用于获取当前用户的api和用于用户设置的API?还是我应该像上面那样将它们分开,并且还创建另一个将api调用与forkjoin结合起来以涵盖不同用例的动作?

getCurrentUserDetails$ = createEffect(() =>
    this.actions$.pipe(
      ofType(getUserDetailsAction),
      switchMap(() => {
        const accessToken = localStorage.get('accessToken');
        if (!accessToken) {
          return of(getUserDetailsFailureAction());
        }

        return forkJoin([this.authService.getCurrentUser(), this.authService.getUserSettings()].pipe(
            map((res) => {
              return getUserDetailsSuccessAction({
                res
              }); // This will update the store with both user settings and user details
            }),
            catchError((errorResponse: HttpErrorResponse) => {
              return of(getUserDetailsFailureAction());
            }),
          );
        }))
    );

0 个答案:

没有答案