关于ngrx效果,我有一个与设计相关的问题。在我的项目中,我们有两个单独的API,一个用于获取当前用户,另一个用于获取用户设置。因此,成功登录后,我需要同时获取当前用户和用户设置。我创建了两个单独的操作(以及用于处理这些操作的相应效果)-getCurrentUser和getCurrentUserSettings,它们在成功获得登录响应后最终修改了商店中的currentUser和userSettings属性的值:-
loginSuccess$ = createEffect(() =>
this.actions$.pipe(
ofType(LoginSuccessAction),
switchMap(() => [getCurrentUserAction(), getUserSettingsAction()]),
tap(() => {
this.router.navigateByUrl('/dashboard');
})
)
);
同样,在我的应用程序组件的ngOnInit函数中,我分别分派了getCurrentUser
和getUserSettings
操作,以便在重新加载页面时不会丢失应用程序状态:-
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());
}),
);
}))
);