2017-06-13 5 views
0

私は再選択ライブラリを使用しています。 私は、各セレクタ(stateProps内)に特定のセレクタ(セレクタに接続され、セレクタAとして参照可能)に接続されている多くのコンポーネントを持っています。セレクタAのパラメータ(セレクタもB、C、Dと呼ぶことができます)のいずれかが変更されるたびに、セレクタAは再計算し、接続されたコンポーネントごとに個別に呼び出されます。この計算が集中するので、これは私に多くのパフォーマンスを必要とします。これを避け、一度計算する方法はありますか? ありがとう同じセレクタを使用している複数のコンポーネントが再選択

+0

あなたはカレーを見るかもしれません。これにより、他のパラメータが変更されていないときにあるレベルのキャッシングを維持できるようになり、関連するパラメータが変更されたときにのみ計算が必要になります(https://medium.com/@kbrainwave/currying-in-javascript-ce6da2d324feを参照)。 – sfletche

答えて

0

再選択ライブラリimplements memoization for the selectorscreateSelector関数で作成されたセレクタは、セレクタへの入力値が変更された場合にのみ再計算されます。それ以外の場合、セレクタは以前のメモ帳の値をコンポーネント間で返します。 reselect documentationから

入力セレクタの値がセレクタへの以前の呼び出しと同じ場合、変換関数を呼び出す代わりに以前に計算された値が返されます。

これは、コンポーネント間で同じセレクタ関数を再利用する必要があります。通常、セレクタは、選択している状態を構築するレデューサー(例:reducers.js)と一緒に作成します。余分なスマート性のためにセレクタを作成して、異なるセレクタにまたがって共有されているサブ状態もメモできるようにする必要があります。

+0

私は使用します複数のコンポーネントにまたがるセレクタ また、私はセレクタの複数のレベルが他のものの上にあるということに言及する価値があります。 だから私はいくつかの入力セレクタがそれにもかかわらず変化していると思っています。入力セレクタを「createSelector」セレクタにすると、その度に最も深いセレクタが入力セレクタとは異なる機能を持つようになる可能性がありますか? –

関連する問題