2017-10-01 7 views
0

これは一般的なngrx/rxjsの質問です。現在、私はデータと呼ばれる単一の減速でそれらのすべてを持っているreduxとngrx - 同じ減速器の変更による不要な値の発火を避ける

  • プロジェクト
  • 藤堂
  • イベント

:私は3つのデータ・配列を持っています。

私はそれを正しく理解している場合、これは値するたびに発生しますコンポーネントで、私は

store.select(fromRoot.getProjects).subscribe() 

を持っているので、

export const getProjects = createSelector(getDataState, fromData.getProjects); 
export const getTodos = createSelector(getDataState, fromData.getTodos); 

でカスタムセレクタを使用してプロパティに加入

const INITIAL_STATE: State = { 
    projects: [], 
    todos: [], 
    events: [] 
}; 

減速機全体に何らかの変更があった場合は、プロジェクトの

todosに10回の変更があり、プロジェクトが引き続き同じ値の10倍の発火を起こし、潜在的にサブスクリプション内の機能が不必要に10回トリガされる可能性があります。

プロパティごとに個別のリデューサを作成する以外に、これを回避する他の方法はありますか?

答えて

1

あなたはそれをテストしましたか?なぜなら、答えはいいえです。これは、変更がgetProjectsスライスの状態で起きた場合にのみ発生します。

また、asyncパイプを使用して、コンポーネントをスマート/ダムコンポーネントに分割し、データをダムコンポーネントにバインドすることもできます。あなたはasyncパイプがあなたのためにそれをして以来、全く店に加入しないようにその方法。あなただけ書くあなたのスマートコンポーネントで、その後

this.propertyX$ = this.store(yourReducer.yourReducerStateProperty);

とスマートコンポーネントでは、あなたのダムのコンポーネントにバインドHTML:それをする

<dumb-component [propertyX]=propertyX$ | async> </dumb-component>

0

一つの方法です異なる減速機に分割する もう1つのアプローチは、以下のようなカスタムセレクタを作成することです

this.foo=store.select('somereducer').pluck('yourtargetobject').distinctUntilChanged()

あなたは、オブジェクトの変更かどうかを区別するために、オブジェクトの値を比較する必要がある場合は、比較演算

/* With comparer */ 
var source = Rx.Observable.of({value: 42}, {value: 42}, {value: 24}, 
{value: 24}) 
    .distinctUntilChanged(function (x) { return x.value; }, function 
(a,b) { return a !== b; }); 
を使用することができます
関連する問題