をフィルタリングすると、100,000+オブジェクトを保持する配列があると言えます。Reactjs与えられたアプリで膨大な数のオブジェクトをベストプラクティス
オブジェクトが
let collection = [{
name:'name',
price: 10,
group_id: 1
},
{
name:'name 2',
price: 8,
group_id: 2
},
];
を次のようになり、今私はすべての10万オブジェクトを表示するビューを持っており、ユーザーは価格帯やGROUP_IDによってリストをフィルタリングすることができます言うことができます。
- このようなリストは、リモートjsonからロードされた静的リスト、または還元された保存されたコレクションであることができます。
価格が&のグループフィルタを使用してこのフィルタをフィルタリングする最適な方法は何ですか?
私の最初の考えは、親コンポーネントの状態で "filtered_list"と呼ばれる別の配列を保持することでした。フィルタの変更があった場合、filtered_listは親Collection(100,000+オブジェクトを再度ループ)をフィルタリングして再構成します。
が、これはそれほどパフォーマンスではないに見えるので、私は新しいフィルタがすでにfiltered_list
または使用親にcollection
例を使用する必要がある場合deciedいくつかのロジックを記述する必要がありかもしれ考慮してください - group_filter = 1 GROUP_IDれた場合は、 group_1が2から変更された場合、filtered_listにはgroup_id = 2の項目が含まれていないため、大きなコレクション全体をリフィルする必要があるため、filters_1をフィルタリングする必要があります。 、そのコレクションのみ...
これは私に別の問題をもたらす。どこで私はfiltered_list variablを維持すべきですか? e?
これをreduxストアに追加した場合、これはreduxの主張に違反し、そのストアはデータの作成に必要な情報のみを保持し、計算されたデータは保持しません。
私が得たデータを計算するためReduxのドキュメントで推奨されて再選択のライブラリを使用してきたconst App = props =><div>
<aside>
<Filtes />
</aside>
<article>
{props.collection.map(item=><label>item.name</label>)}
</article>
</div>
export default connect(({collection})=>({collection}))(App)
コレクションを選択するか、またはvisibleItemsのみをフィルタリングする必要があるかどうかを判断するにはどうすればよいですか?私は巨大なリスト – Zalaboza
セレクタを構成することができますので、全体のコレクションをフィルタリングすることを避けようとしているので、あなたが価格でフィルタリングするセレクタにフィードされるグループによってフィルタリングするセレクタを持っている場合、フィルタを適用すると、グループフィルタは再計算されません。https://github.com/reactjs/reselect#composing-selectors –