2016-12-14 5 views
1

ngrxでIonic2 Appを開発しています。ページから離れるときにストアからの更新を一時停止

私の店舗からデータを選択するには、私はreselectを使用しています。

私は同じデータを(同一のレデューサーから)使用していますが、現在のページに応じて他のレデューサーデータと組み合わせて使用​​しています(これは各ページに独自のレシピーターがありますが、これらの議論のいずれかが変わるたびに、これらのページのすべてのリセレクターを再計算する必要があります)。

は、それは次のようになります。

page1 = createSelector(fromState1.getData, fromCommonState.getData,(data, commonData) => {...}); 
page2 = createSelector(fromState2.getData, fromCommonState.getData,(data, commonData) => {...}); 
page3 = createSelector(fromState3.getData, fromCommonState.getData,(data, commonData) => {...}); 

私が持っている懸念があるという共通の状態は私がちょうどで使用されるものを再計算する必要がある場合でも、すべてのセレクタが再計算されている変更するたびに多くのページが存在する場合現在のページ。セレクタが複雑な作業をする必要がある場合、これは大きなパフォーマンス上の問題になる可能性があると私は考えています。

私はそのページに戻るまで、店舗からの更新を「一時停止」する方法はありますか?このようにして、現在のページのセレクタのみが再計算されます。

また、不要な計算を避ける別の方法がありますか?

答えて

0

全体のアプリケーション(または複数のスマートコンポーネント)でセレクタを共通ファイル(セレクタ.ts)に作成します。あなたのケースでは、シンプルにしてスマートコンポーネント(ページ)にセレクタを配置するだけでいいのですか?その方法は、必要なときにのみ計算し、購読します。

reselectはObservablesを使用していないライブラリで頻繁に使用され、データは実際にはすべての状態変更時にプッシュされます。 ngrxのようなライブラリでは、たくさんのデータを扱わない限り、この利得は無視できます。私にとっては、これは時期尚早の最適化です。

状態を一時停止するには、現在のページの状態を店舗のどこかに維持してから、状態のページが一致した場合にのみフィルタを使用して大量のアクションを実行します。

let page3 = createSelector(
fromState3.getData, fromCommonState.getData, 
(data, commonData) => { 
    if(fromState3.selected) { 
     // Large computation 
    } 
}); 
関連する問題