Home > OS >  ngrx error "Module '"@ngrx/effects"' has no exported member 'Effect�
ngrx error "Module '"@ngrx/effects"' has no exported member 'Effect�

Time:01-05

I trying to implement an effect in ngRx. I import ted "Effect" from "@ngrx/effects", but It showing the error "Module '"@ngrx/effects"' has no exported member 'Effect'.ts(2305)"

 import { Actions, ofType, Effect } from "@ngrx/effects";
 import { switchMap } from "rxjs/operators";

 import * as AuthActions from './auth.actions';

 type loginResponse = { token: string, message: string, loggedIn: boolean, time: number };

 export class AuthEffects {
    @Effect
    login = this.actions$.pipe(
        ofType(AuthActions.LOGIN),
        switchMap((authData: AuthActions.Login) => {
            return this.http
                .post<loginResponse>(
                    'http://localhost:3000/user/signup',
                    { 
                       email: authData.payload.email, 
                       password: authData.payload.password 
                    }
                )
        })
    )
    constructor(private actions$: Actions, private http: HttpClient) { }
}

I'm trying to implement a login system using an effect in ngRx. I imported "Effect" from "@ngrx/effects", but It showing the error "Module '"@ngrx/effects"' has no exported member 'Effect'.ts(2305)"

CodePudding user response:

It looks like you are trying to use the @Effect from the @ngrx/effects library, but the error message you shared showing that there is no exported member named Effect in the @ngrx/effects module.

i think it's because of this error is that you are using an older version of the @ngrx/effects library. In version 8 the Effect decorator was modified to createEffect function.

it will look something like this:

import { Actions, ofType, createEffect } from '@ngrx/effects';
import { switchMap } from 'rxjs/operators';
import { AuthActions } from './auth.actions';

type loginResponse = { token: string, message: string, loggedIn: boolean, time: number };

export class AuthEffects {
  login$ = createEffect(() =>
    this.actions$.pipe(
      ofType(AuthActions.LOGIN),
      switchMap((authData: AuthActions.Login) => {
        return this.http
          .post<loginResponse>(
            'http://localhost:3000/user/signup',
            { 
              email: authData.payload.email, 
              password: authData.payload.password 
            }
          )
      })
    )
  );

  constructor(private actions$: Actions, private http: HttpClient) {}
}```
  • Related