Angular/ngrx 应用程序在单击注销时中断
Angular/ngrx application breaks on logout click
我已经尝试解决了4-5天,但仍然找不到问题的原因。
如标题所述,每次我单击注销按钮时,应用程序浏览器都会冻结,无法关闭选项卡,为了再次 运行 该应用程序,我必须打开另一个应用程序或通过任务管理器关闭浏览器.
我认为问题出在 ngrx/effect
,我用它来清除 localstorage
。
这是它:
@Effect() logout$: Observable<Action> = this.actions$
.ofType(fromActions.LOGOUT)
.pipe(
tap((action: fromActions.Logout) => {
return this.authService.logout();
}))
方法如下:
logout() {
localStorage.clear();
}
而且令牌还在,动作没有发送,我检查了动作,没有类型错误..
这是两张照片,点击注销之前和之后:
编辑:
行动调度:
onLogout() {
this.store.dispatch(new fromActions.Logout());
}
减速器:
case AuthActions.LOGOUT: {
return {
...state,
loading: false,
loggedIn: false
}
在您的效果中,您正在 return执行注销操作,无限循环。
尝试创建一个 LogoutSuccess 操作,并在注销成功时return创建它。
... .pipe(
tap((action: fromActions.Logout) => {
return this.authService.logout();
}),
map(() => { return {type: 'NO_ACTION'}; })
我已经尝试解决了4-5天,但仍然找不到问题的原因。
如标题所述,每次我单击注销按钮时,应用程序浏览器都会冻结,无法关闭选项卡,为了再次 运行 该应用程序,我必须打开另一个应用程序或通过任务管理器关闭浏览器.
我认为问题出在 ngrx/effect
,我用它来清除 localstorage
。
这是它:
@Effect() logout$: Observable<Action> = this.actions$
.ofType(fromActions.LOGOUT)
.pipe(
tap((action: fromActions.Logout) => {
return this.authService.logout();
}))
方法如下:
logout() {
localStorage.clear();
}
而且令牌还在,动作没有发送,我检查了动作,没有类型错误..
这是两张照片,点击注销之前和之后:
编辑: 行动调度:
onLogout() {
this.store.dispatch(new fromActions.Logout());
}
减速器:
case AuthActions.LOGOUT: {
return {
...state,
loading: false,
loggedIn: false
}
在您的效果中,您正在 return执行注销操作,无限循环。
尝试创建一个 LogoutSuccess 操作,并在注销成功时return创建它。
... .pipe(
tap((action: fromActions.Logout) => {
return this.authService.logout();
}),
map(() => { return {type: 'NO_ACTION'}; })