この記事では『ngrxOnRunEffects』について
- ngrxOnRunEffectsとは
- ngrxOnRunEffectsのプログラム例
などを図を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。
ngrxOnRunEffectsとは
ngrxOnRunEffectsはAngularの状態管理ライブラリであるNgRxの一部であり、Effectsのライフサイクル(開始と停止)を制御することができるメソッドです。
ngrxOnRunEffects
は以下に示すように、OnRunEffects
インターフェースのメソッドになります。
interface OnRunEffects {
ngrxOnRunEffects(resolvedEffects$: Observable<EffectNotification>): Observable<EffectNotification>
}
ngrxOnRunEffects
の構文は以下のようになっています。
ngrxOnRunEffectsの構文
ngrxOnRunEffects(resolvedEffects$: Observable<EffectNotification>): Observable<EffectNotification>
- 引数:
resolvedEffects$<EffectNotification>
- 返り値:
Observable<EffectNotification>
ngrxOnRunEffectsのプログラム例
以下にngrxOnRunEffects
を用いたプログラムの一例を示します。
export class UserEffects implements OnRunEffects {
constructor(private actions$: Actions) { }
ngrxOnRunEffects(resolvedEffects$: Observable<EffectNotification>) {
return this.actions$.pipe(
ofType('LOGIN'),
exhaustMap(() =>
resolvedEffects$.pipe(
takeUntil(this.actions$.pipe(ofType('LOGOUT')))
)
)
);
}
}
上記のプログラムでは、「LOGINアクション」がディスパッチされると、UserEffects
が開始され、「LOGOUTアクション」がディスパッチされると、UserEffects
が停止します。すなわち、「LOGOUTアクション」がディスパッチされるまで、UserEffects
は実行され続けます。
ngrxOnRunEffectsを用いることで、Effectsを一時停止したり、再開したりなど、Effectsの動作を細かく制御することができます。例えば、ユーザーがログインしていない時には、特定のエフェクト(例えば、APIを呼び出して、データを取得するなど)を実行しないように制御し、ユーザーがログアウトした時には、すべてのEffectsを停止したりすることができます。
ここで、resolvedEffects$
オブザーバブルは、UserEffects
クラスのEffects
が解決するたびに通知を送るオブザーバブルです。このresolvedEffects$
オブザーバブルはngrxOnRunEffects
メソッドに渡され、エフェクトのライフサイクル(開始と停止)を制御するために使用されます。
本記事のまとめ
この記事では『ngrxOnRunEffects』について、以下の内容を説明しました。
- ngrxOnRunEffectsとは
- ngrxOnRunEffectsのプログラム例
お読み頂きありがとうございました。