ソート、フィルタリング、ページネーション
TanStack Tableの機能で列ソート、全体・列フィルタリング、クライアントサイドページネーションを有効にします
「ソート、フィルタリング、ページネーション」はCoddyKit上の無料React Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
ソートの有効化
ソートを追加するには、getSortedRowModelをインポートし、useReactTableの設定に追加します。また、ソート状態({id, desc}オブジェクトの配列)と、Reactの状態に接続するonSortingChangeハンドラーも必要です。
ソート済み行モデルはコア行モデルをラップし、現在のソート状態に基づいて行の順序を変更します。
列ヘッダーでのソートの切り替え
各列ヘッダーにはcolumn.getToggleSortingHandler()が用意されています。これをth要素のonClickに割り当てます。クリックするたびに、昇順、降順、ソートなしの状態が順番に切り替わります。
column.getIsSorted()は'asc'、'desc'、またはfalseを返すため、適切なソート方向の矢印を表示できます。
複数列のソート
TanStack Tableでは、複数の列を同時にソートできます。ユーザーがShiftキーを押しながら2つ目の列ヘッダーをクリックすると、最初の列を削除せずにソート配列へ追加できます。
sortingState配列には、優先順位順にすべてのアクティブなソート列が含まれ、ソート済み行モデルはそれらを順番に適用します。
グローバルフィルタリング
グローバルフィルタリングを有効にするには、getFilteredRowModelをインポートし、globalFilter状態とonGlobalFilterChangeハンドラーを追加します。入力要素を状態に接続すると、すべての列を一度に対象としてフィルタリングできます。
グローバルフィルターでは、デフォルトであいまい一致またはincludes方式が使用され、filterFnsで設定を変更できます。
列単位のフィルタリング
各列では、column.getFilterValue()とcolumn.setFilterValue()を使って独自のフィルターを提供できます。各列ヘッダーの下にフィルター入力欄を追加し、これらのメソッドに接続します。
列フィルターとグローバルフィルターは重ねて適用されます。フィルタリング済み行モデルに表示されるには、行が有効なすべてのフィルターを通過する必要があります。
ページネーションの有効化
getPaginationRowModelをインポートし、pagination状態オブジェクト(pageIndexとpageSize)およびonPaginationChangeハンドラーとともにuseReactTableの設定へ追加します。
ページネーション行モデルは、フィルタリング済み(およびソート済み)の行を分割し、現在のページに該当する部分だけを取り出します。
ページ間の移動
テーブルインスタンスには、移動用のtable.nextPage()、table.previousPage()、table.firstPage()、table.lastPage()が用意されています。境界に到達したときは、table.getCanNextPage()とtable.getCanPreviousPage()を使ってボタンを無効にします。
table.setPageIndex(n)を使うと特定のページへ直接移動でき、table.setPageSize(n)を使うと1ページに表示する行数を変更できます。
ページネーション情報
table.getPageCount()は、フィルタリング後の行数をpageSizeで割って、ページの総数を返します。table.getState().pagination.pageIndexは、現在の0始まりのページインデックスを示します。
これらの値を使って、ページネーションUIに「12ページ中3ページ目」のようなページ番号を表示できます。
行モデルの組み合わせ
行モデルは組み合わせて利用できます。getCoreRowModelが基盤を提供し、getFilteredRowModelがそれをラップしてフィルターを適用し、getSortedRowModelがフィルタリング済みのデータをラップしてソートを適用し、getPaginationRowModelが結果を現在のページ用に分割します。
順序が重要です。フィルタリングの後にソートが行われ、最後にページネーションが行われます。
パフォーマンスに関する考慮事項
TanStack Tableは、行モデルの計算結果を内部でメモ化します。変更された行モデルだけが再計算されるため、大規模なデータセットでもソートとフィルタリングを効率的に実行できます。
非常に大規模なデータセット(100,000行以上)では、ページネーションと仮想化(react-virtual)を組み合わせ、ページ内のすべての行を一度にレンダリングしないようにします。
ソート、フィルタリング、ページネーションのまとめ
getSortedRowModelをソート状態に、getFilteredRowModelをglobalFilterおよび列フィルターの状態に、getPaginationRowModelをページネーション状態に接続します。各機能はオプトイン方式で、他の機能と自然に組み合わせられます。
列ヘッダーではgetToggleSortingHandlerでソートを操作し、入力欄ではsetFilterValueとonGlobalFilterChangeでフィルターを操作し、ボタンではnextPage、previousPage、setPageIndexでページネーションを操作します。
TanStack Tableのページネーション状態
TanStack Tableのページネーション状態で、現在のページインデックスとページサイズを保持するオブジェクトはどれですか。
レッスンのまとめ
ソートにはgetSortedRowModel、ソート状態、列ヘッダーのクリックハンドラーが必要です。フィルタリングには、グローバルおよび列ごとのフィルター状態とともにgetFilteredRowModelを使用します。ページネーションには、pageIndexとpageSizeの状態とともにgetPaginationRowModelを使用します。
3つの行モデルはすべて自動的に組み合わされます。最初にフィルタリング、次にソート、最後にページネーションが行われます。
よくある質問
「ソート、フィルタリング、ページネーション」レッスンは無料ですか?
はい。「ソート、フィルタリング、ページネーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「ソート、フィルタリング、ページネーション」で何を学びますか?
TanStack Tableの機能で列ソート、全体・列フィルタリング、クライアントサイドページネーションを有効にします ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ソート、フィルタリング、ページネーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- TanStack Tableの思想とヘッドレス設計
- 列の定義と行のレンダリング
- ソート、フィルタリング、ページネーション
- 行選択と仮想化テーブル