Действия должны иметь свойство типа - PullRequest
0 голосов
/ 27 сентября 2019

Похоже, что мой эффект вызывает Actions must have a type property, похоже, это мое RegisterSuccess действие, которое вызывает проблему, но, оглядываясь на SO, это может быть способ, которым я это называю, я попыталсяих решения, но они не работают в моем случае.

Эффект:

 @Effect()
    register = this.actions$.pipe(
        ofType(AuthActionTypes.REGISTER),
        switchMap(action => this.auth.register(action.registration).pipe(
            map(result => ([
                { type: AuthActionTypes.REGISTER_SUCCESS, user: result }
            ])),
            catchError(result => ([
                { type: AuthActionTypes.REGISTER_FAIL }
            ])),
        ))
    );

Действие:

export class Register implements Action {
    readonly type = AuthActionTypes.REGISTER;
    constructor(public registration: Registration) {}
}

export class RegisterSuccess implements Action {
    readonly type = AuthActionTypes.REGISTER_SUCCESS;
    constructor(public user: User) {}
}

export class RegisterFail implements Action {
    readonly type = AuthActionTypes.REGISTER_FAIL;
    constructor() {}
}

Служба:

register(user: Registration): Observable<any> {
        return this.api.post('auth/register', user).pipe(map(res => res.data));
    }

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Ваши эффекты написаны для NgRx версии 8.3.0. Ваше действие написано для NgRx версии 7.4.0

"switchMap (action => this.auth.register (action.registration) .pipe (" youздесь не нужна труба

для NgRx версии 8.3.0 это должно быть примерно так: Действие:

import { createAction, props } from '@ngrx/store';
export const register = createAction(AuthActionTypes.REGISTER());
export const registerSuccess = createAction(AuthActionTypes.REGISTER_SUCCESS, props<{user: User}>());
export const registerFail = createAction(AuthActionTypes.REGISTER_FAIL);

Эффекты:

@Effect()
    register = this.actions$.pipe(
        ofType(register.type),
        mergeMap(action => this.auth.register(action.registration),
        map(result => ({ type: registerSuccess.type, user: result })),
        catchError(result => ({ type: registerFail.type })),
        ))
    );
0 голосов
/ 27 сентября 2019

Это не способ вернуть действие в NGRX

Вместо этого вы должны вернуть вот так

Сначала импортируйте свое действие (Пожалуйста, измените свой код соответствующим образом)

import * as authActions from "user-auth.actions";

Затем измените свой эффект

map(result => {
   return new authActions.RegisterSuccess(result) 
  }
),
catchError(result => ([
   of(authActions.RegisterFail)
])),

Строка authActions.RegisterSuccess вызывает ваше определение класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...