可能有人知道为什么NGXS状态不能在HttpClient POST请求中更改。
ctx.patchState()
仅在HTTP POST请求之外起作用。
@Action(SignIn)
signin(ctx: StateContext<AppStateModel>, { payload }: SignIn) {
// ctx.patchState({isLoggedIn:true}) this works!
return this.api$.signin(payload)
.pipe(
tap((user: User) => {
console.log(user);
ctx.patchState({ isLoggedIn: true })
})
)
.subscribe(
(user: User) => {
ctx.patchState({ isLoggedIn: true })
}
)
}
答案 0 :(得分:2)
实际上,状态正在改变,但是您看不到它,因为您返回的订阅尚未完成。换句话说-一旦返回的Observable的订阅完成,您将看到该动作正在分派。
如评论中所述,返回的可观察动作已在幕后被订阅,因此无需再次订阅。
话虽如此,您可以在管道中传递take(1)
。
它的作用是,一旦触发一次,它便完成了对可观察对象的订阅。
@Action(SignIn)
signin(ctx: StateContext<AppStateModel>, { payload }: SignIn) {
return this.api$.signin(payload)
.pipe(
take(1), // <-- Add that
tap((user: User) => ctx.patchState({ isLoggedIn: true }))
);
}