2017-11-15 1 views
1

私は料理に必要な成分の大量のデータを持っています。 3000以上+フロントエンドとしてreactJSを使用し、バックエンドとしてdjango rest frameworkを使用して大きなデータリストを表示する方法

私はバックエンドとしてDjango rest frameworkを、フロントエンドとしてReactJsを使用しています。リスト内

各項目はジャンゴで名前、ID、measurementunit、キログラム/ LTRにおける密度及びコスト/ measurementunit

を有する私はJSON形式のデータを供給するためのAPIエンドポイントを作成しました。

データを表形式で表示し、上部に検索フィルタを表示したいとします。また、私は最大300の結果を表示したいときもあります。

これを達成する方法を教えてもらえますか?私は一度にすべてのリストを取得するか、またはdjangoから改ページを使用する必要があります。私は検索のために別々のAPIを使用するか、フロントエンドでreactjsを使って行うべきです。

現在、私はdjangoでの承認は必要ありません。データはローカルでのみ使用されます。

+1

ページング1-2 ..- 10 –

答えて

2

3000レコードは、1つのチャンクでクライアントに送信するためにたくさんあります。それに対して開発することは簡単ですが、スケールがうまくいかず、測定可能な読み込み時間を作成する可能性があります。それで大丈夫なら、あなたのデータセットが成長することを期待していないのであれば、実用的なアプローチはそれを大きなリストにしておくことです。しかし、それはベストプラクティスに反するものです。

いずれにしても、3K行の巨大なリストをユーザーに表示したくない可能性があるので、UIには何らかのページングメカニズムがあります。それは「次の」、「前の」ページ、または無限のスクロールである可能性があります。いずれにしても、データ抽象化では、それをページングされたデータとして考慮する必要があります。

ページングAPI あなたのAPIのサポートページングを作ることにしたと仮定すると、あなたはDjango Paging APIたりREST APIのためのいくつかの他の抽象化と同様に、バックエンドのフレームワークのページング機能を使用する必要があります。そこにはたくさんの資源があります。

検索 APIを改ページすると、バックエンドの検索(フィルタリング)も処理されます。クライアント側のフィルタリングを管理できる唯一の方法は、クライアントがすべてのデータにアクセスできるかどうかです。そうではないので、データリクエストに検索フィルタを含める必要があります。検索とページネーションは互いに排他的ではありませんので、APIが両方を同時にサポートしていることを確認してください。 、あなたがあなた自身のUI(it is easy to do)を構築することができます

http://yoursite.com/api/ingredients?page=5&page_size=100&search=carrot 

クライアント リアクト側では、またはあなたは次のように、あなたのためにこれを抽象化コンポーネントを使用することができます。これを処理する一般的な方法は次のようになりますreact-js-paginationまたはreact-paginate。クライアントコンポーネントは、APIがページングされているかどうかを本当に気にするべきではありません。代わりに、別のレコードを表示するタイミングを通知するだけで、残りはあなた次第です。

大きなREST呼び出しですべてを保持することにした場合でも、表示する配列からデータをスライスする必要があります。 APIにページを設定すると、受信したページのクライアント側にインスタンスキャッシュを保持できます。データがない場合は、RESTを呼び出して取得し、データを配列に取り込みます。そうすれば、ユーザーが前進して後退する場合、再フェッチしません。

結論 これはちょっと役立つといいですね。お楽しみください:)

+0

私のデータが増加し続けるように、私はDjangoの休憩フレーム作業のページ設定に行く必要があります。 api urlから関数を検索することもできます。ありがとうございました。 –

+0

私はDRFのAPIから検索している場合は、私はそれが示唆している検索のために入力する方法があります。それは私がAPIから全体のリストを取得する必要があります。 –

+0

先読み検索_can_既存のページングされたAPIを使用します。小さなページセットの最初のページを取得するだけですが、ニーズ/ UXには十分に速くない可能性があります。多くの場合、先読みAPIは、機能に必要な最小限しか返さない、よりタイトで集中的なAPIです...特殊なAPIに対して "ca"を検索すると、文字列のリストを返すことがあります。[["carrot" "ケパ"、 "オカラ"、 "キャノーラ油"] '。このようなAPIは、データベースの索引付けとキャッシュを使用して、ユーザーの入力に対応できるようにします。 –

関連する問題