Состояние NGXS не меняется - PullRequest
0 голосов
/ 26 августа 2018

Может быть кто-то знает, почему состояние NGXS не может измениться внутри запроса POST HttpClient.

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 })

                }
            )
    }

1 Ответ

0 голосов
/ 26 августа 2018

На самом деле состояние меняется, но вы его не видите, потому что возвращаете подписку, которая еще не была завершена.Другими словами - вы увидите отправляемое действие после завершения подписки возвращаемой наблюдаемой.

Как упоминалось в комментариях, возвращаемая наблюдаемая действий подписывается за сценой, поэтому в этом нет необходимости.чтобы снова подписаться на него.

После этого, вы можете передать 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 }))
            );
    }
...