可能有人知道为什么HttpClient POST请求中的NGXS状态不能改变。
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 })
}
)
}
发布于 2018-08-27 04:23:46
实际上,状态正在改变,但您看不到它,因为您返回了尚未完成的订阅。换句话说,一旦返回的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 }))
);
}
https://stackoverflow.com/questions/52029547
复制相似问题