5

バックグラウンド

私の店のレデューサーの 1 つは、アプリ内で選択されたものを処理します。このストア ( と呼びましょうapp) のインターフェースは次のようになります。

interface IApp {
    selectedProject: IProject;
    selectedPart: IPart;
}

したがって、別の「プロジェクト」が選択された場合にのみアクションを実行するサブスクリプションが必要です。私はこのようなものを書きました:

this.store.select('app')
    .map((store: IApp) => store.selectedProject)
    .subscribe((project: IProject) => {
        // Stuff happens here
    });

この関数は、selectedProject変更時に処理を行います。ただし、selectedPart変更時にも処理を行います。明らかにapp、マップに関係なく、ストア全体をリッスンします。それは理にかなっている。

質問

私はこれが起こることを望んでいません。変更時にのみ関数を実行したいselectedProject

これを解決するために、別のストアにselectedProject分割できることを知っています。selectedPartしかし、すぐに非常に多くの店舗ができてしまいます。たぶん、これが意図された方法ですか?

別の方法はありますか?selectedProjectこのインターフェイスを使用してストアを保持し、ストアの一部の変更のみを検出するサブスクリプションを持つことはできますか?

4

1 に答える 1

9

を探していると思いますdistinctKeyUntilChanged

this.store.select('app')
  //Only emit when selectedProject has changed
  .distinctUntilKeyChanged(
    //Key to filter on
    'selectedProject',
    //Optional comparison function if you have a specific way of comparing keys 
    (x, y) => x.projectName === y.projectName)
  .pluck('selectedProject')
  .subscribe((project: IProject) => {});
于 2016-07-14T16:15:06.637 に答える