web-dev-qa-db-ja.com

NGRX:TypeError:アクションにはタイププロパティが必要です

ngrxの初心者ですが、例外に直面しています。理由はわかりません...

dispatchactionを使用してeffectで処理しようとしていますが、エラーが発生し続けます:TypeError: Actions must have a type property

行動:

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

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

効果:

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

成分:

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

使ってます:

効果:4.0.5およびストア:4.0.3

6
Thibs

これが他の誰かが始めるのを助けるなら...ターンアウト私はngrxがマップ演算子で期待しているアクションを返していませんでした。

5
Thibs

効果は最後にアクションを返さなければならないからです。したがって、2つの選択肢があります。

  1. {type:string}オブジェクトを返します
  2. 新しいAction()を返す

    import * as MyActions from "./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) {}
    }
    
5
Engalar Liu

デフォルトでは、作成するすべてのエフェクトは、ストアにディスパッチされるアクションを発行することになっています。したがって、エフェクト関数の結果として、タイプObservable<Action>を返す必要があります。ここで、Actionは@ ngrx/storeからのインターフェースです。

export interface Action {
    type: string;
}

したがって、プロパティtypeを持つオブジェクトへのマッピングは機能します。

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

この場合、レデューサーでaction_for_test_effectをサポートする必要があります。

エフェクトからアクションをディスパッチする必要がない場合は、configオブジェクトを追加してエフェクトを無効にすることができます。

@Effect({dispatch: false}) testEffect = this.actions$
                 .ofType(MyActions.TEST_ACTION);
0
kuceraf