我对ngrx和Redux风格体系结构很陌生,而且我在理解如何链接动作/效果时遇到问题。一个例子就是实现基本的功能,比如在用户登录后采取行动。我的核心焦点在于,用户登录后采取的行动将取决于应用程序的当前状态 - 用户可能在任何地方在应用程序中提供登录提示/页面时。ngrx链接操作/效果 - 例如,登录然后导航
任何示例我已经看到硬编码效果,一旦用户登录就会发生。在我的情况下,这并不适合如上所述,我并不总是希望发生同样的动作。
以下是包含登录组件的主页的一些示例代码。在这种情况下,我想用户重定向到/买入“一旦他们在已登录
@Component(..)
export class HomePageComponent {
constructor(private store: Store<any>) {
}
public onLoginSubmitted(username, password) {
this.store.dispatch(new loginActions.Login({username, password}));
// once this has happened successfully navigate to /buy
}
}
例效果
@Injectable()
export class LoginEffects {
......
@Effect()
login$ = this.actions$
.ofType(loginActions.ActionTypes.LOGIN)
.switchMap((data) => {
return this.loginService.login(data.payload)
.map(() => new loginActions.LoginSuccess({loggedIn: true, isLoggingIn: false}))
.catch((error) => {
return of(new loginActions.LoginError({loggedIn: false, isLoggingIn: false}));
});
});
......
}
我对你会如何解决这个问题的几点思考 - 但他们都没有感觉正确。这些包括
- 传递数据与登录有效载荷,以确定要采取的动作下
- 写作大量的,其在LoginSuccess采取行动,但在一些较高的水平
- 被过滤通过听写成分特异性作用效果到商店的事件(这是可能/不好的做法?)
- 从商店读取有关当前登录状态的数据并在组件中采取行动。然而,这种逻辑会立即运行,这可能不会产生预期的效果
任何人都可以指出我正确的道路/目前的例子,这应该如何解决?
有效负载的一部分可能是'redirectRoute',然后登录后,'LoginSuccess'效果将根据'redirectRoute'指定的位置进行导航。你只有一个'loginSuccess'动作,但它可以重定向到任何地方。 – Adam
它可能是 - 但是这假设你将永远想在登录后重定向。这可能不一定是这种情况,例如,您可能想要解雇我喜欢此解决方案的模式 – dannym