animals
は還元店にあるとします。これは正規化されたオブジェクトであり、キーはid
であり、値はオブジェクト自体です。各動物はキーis_dog
を有する。潜在的に高価な計算プロパティの再計算を避ける方法
animals: {
'id1': { location: 'foo', is_dog: true, name: 'Dog1' },
'id2': { location: 'foo', is_dog: false, name: 'Cat1' },
'id3': { location: 'foo', is_dog: false, name: 'Cat2' },
'id4': { location: 'foo', is_dog: true, name: 'Dog2' },
}
Iが接続DogsList
は、ストアの状態を見て、UIコンポーネントにdogIds
の配列を渡す成分を反応させました。
dogIds = _.chain(state.animals).filter('is_dog').map('id').value();
['id1', 'id4']
を返します。この上記の例では:dogIds
の計算のようなものです。
しかし、のは、私は動物の数千を持っていると仮定しましょう、そして各動物は、私はdogIds
が唯一の任意の動物のためであればis_dog
変更が変わることを知っているなど、lastFed
、currentLocation
言って、頻繁に変更される他の特性を有しているが、私はありませんよどんな動物への変更にもフィルタやマップの計算を不必要にしないでください。私はreselect
を使ってみましたが、私はそれが本当にこの場合に役立つとは思わない。
私はdogIds
を適切なreduxに格納することに傾いており、関連する場合にのみ手動で更新します。新しい犬がanimals
に追加されたとき、または猫が犬に変わったとき(私の類推はここでは崩れている)のように。しかし、私はreduxストアで計算されたプロパティを保持することによって何か間違っているように感じる。
ありがとう、それは良いフィードバックです。私が避けようとしていたのは実際の 'フィルター'計算ですが、私はそれについてもっと考えるほど、何百万という動物がいない限り、それほど高価にならないようです。 –
あなたの質問を誤解しているかもしれないと思う。あなたの動物のリストが更新されるたびにその計算を実行する必要があります。そうしないと、犬が猫になったかどうかわからなくなります。 – rorymorris89
1)動物の追加/削除、2)動物の種類の変更(犬から猫への変更)のアクションを扱っている場合、あなたが 'dogsList'を再計算する必要がある時を知っておく必要があります、 必要がない) – rorymorris89