2017-09-11 1 views
2

Étant nouveau ngrx Je suis face à une exception et ne sais pas pourquoi ...NGRX: TypeError: Les actions doivent avoir une propriété de type

Je suis en train de dispatch une action et la poignée dans un effect, mais je continue à obtenir l'erreur: TypeError: Actions must have a type property

Actions:

export const TEST_ACTION = 'test_action'; 
export class TryTest implements Action { 
    readonly type = TEST_ACTION; 

    constructor(public playload: any) { 
    } 
} 
export type MyActions = TryTest; 

Effets:

import * as MyActions from "./myactions.actions"; 

@Injectable() 
export class MyEffects { 
    @Effect() 
    testEffect = this.actions$ 
     .ofType(MyActions.TEST_ACTION) 
     .map((action: MyActions.TryTest) => { 
      return 'something' 
     }); 

    constructor(private actions$: Actions) {} 
} 

composants:

this.store.dispatch(new MyActions.TryTest({ name: 'test' })); 

J'utilise:

effets: 4.0.5 et magasin: 4.0.3

+0

Je pense que vous devez ajouter les parenthèses ('()') lorsque vous souhaitez envoyer une nouvelle action, sinon le constructeur n'est pas appelé: 'this.store.dispatch (nouveau MyActions.TryTest ({nom: 'test'})()); ' – David

+0

Merci David pour le moment, mais je pense que j'appelle le constructeur et passe l'objet {name: test} – Thibs

+0

Oh, je suis désolé, j'ai mal interprété votre code! ça ne fait rien! – David

Répondre

0

Si cela aide quelqu'un d'autre ... à partir Turns out je n'étais pas renvoie l'action attendue par ngrx dans l'opérateur de carte.

1

car l'effet doit retourner une action à la fin. si vous avez deux choix:

  1. un retour {type: string} objet
  2. retour une nouvelle action()

import * comme MyActions de "./myactions.actions";

@Injectable() 
export class MyEffects { 
    @Effect() 
    testEffect = this.actions$ 
     .ofType(MyActions.TEST_ACTION) 
     .map((action: MyActions.TryTest) => { 
      return {type:'your_action'} 
     }); 

    constructor(private actions$: Actions) {} 
} 
+3

S'il vous plaît ne pas seulement le code postal. Au lieu de cela, ajoutez une explication. – tmuecksch