ngrx
の初心者ですが、例外に直面しています。理由はわかりません...
dispatch
action
を使用して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
これが他の誰かが始めるのを助けるなら...ターンアウト私はngrxがマップ演算子で期待しているアクションを返していませんでした。
効果は最後にアクションを返さなければならないからです。したがって、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) {}
}
デフォルトでは、作成するすべてのエフェクトは、ストアにディスパッチされるアクションを発行することになっています。したがって、エフェクト関数の結果として、タイプ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);