Состояние ngrx / store не обновляется в вызываемой функции редуктора - PullRequest
1 голос
/ 24 октября 2019

Я начинаю добавлять ngrx (8.4.0) в существующее приложение Angular (8.2), но одно из моих действий (см. Действие ниже) при запуске не изменяет состояние.

auth.actions.ts (частично)

export const loginSuccess = createAction(
  '[SIGN IN] Login Success',
  props<{ user: any; isNewUser: boolean }>()

Действие loginSuccess обрабатывается с помощью функции редуктора, приведенной ниже.

auth.reducer.ts (частично)

export interface AuthState {
  user: any;
  isNewUser: boolean;
}

export const initialState: AuthState = {
  user: null,
  isNewUser: null
};

const authReducer = createReducer(
  initialState,
  on(loginSuccess, (state, { user, isNewUser }) => ({
    ...state,
    user: user,
    isNewUser: isNewUser
  }))
);

export function reducer(state: AuthState | undefined, action: Action) {
  return authReducer(state, action);
}

Действие loginSuccess отправляется из эффекта, называемого loginWithPopUp.

  loginWithPopUp$ = createEffect(() =>
    this.actions$.pipe(
      ofType(authActions.loginWithPopUp),
      distinctUntilChanged(),
      switchMap(action =>
        from(this.authService.signUpWithPopUp()).pipe(
          map((result: firebase.auth.UserCredential) =>
            authActions.loginSuccess({
              user: result.user,
              isNewUser: result.additionalUserInfo.isNewUser
            })
          ),
          tap(() => this.router.navigate(['/notes'])),
          catchError(() => of(authActions.loginFail()))
        )
      )
    )
  );

Даже если мое действие запущено, и я вижу свойства user и isNewUser в моем действии состояние не обновляется.

unchanged state

user и isNewUser заполнены в действии.

action

Ошибка, которая появляется на консоли.

enter image description here

1 Ответ

2 голосов
/ 24 октября 2019

Код выглядит нормально, можете ли вы проверить, что:

  • вызван редуктор, вы можете поместить туда console.log или оператор отладки
  • убедитесь, что пользовательи isNewUser заполняется в действии, вы можете сделать это, нажав на действие, чтобы переключить в devtools
...