我對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