可能有人知道为什么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 })

                }
            )
    }

最佳答案

实际上,状态正在改变,但是您看不到它,因为您返回的订阅尚未完成。换句话说-一旦返回的observable的订阅完成,您将看到正在分派(dispatch)的 Action 。

如评论中所述,返回的可观察到的 Action 在后台进行了订阅,因此无需再次订阅。

说完之后,您可以在管道中传递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 }))
            );
    }

关于javascript - NGXS状态未更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52029547/

10-12 12:24
查看更多