mcpField
T
tanstack-table

tanstack-table

github.com/oakoss開発20140 回インストール11 週間前に更新
リポジトリ

tanstack-table について

TanStack Tableは、独自の表示を実装したい開発者向けのヘッドレステーブルライブラリです。ソート、フィルタリング、ページネーション、選択、グループ化などの状態とロジックを提供します。

主な機能

  1. 01ヘッドレスなテーブル状態とロジック
  2. 02ソート、フィルタリング、ページネーション
  3. 03行の選択と展開
  4. 04グループ化とカラム制御
  5. 05サーバーサイドデータのパターン
  6. 06仮想化との連携

活用シーン

  1. 01独自のデータテーブルの構築
  2. 02サーバー側でページ分割した結果の表示
  3. 03仮想化による大規模データセットの処理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill tanstack-table

インストール後、Claude Code で/tanstack-tableを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
column-definitions.md
column-row-pinning.md
expanding-grouping.md
filtering.md
infinite-scroll.md
known-issues.md
reusable-components.md
server-side-patterns.md
v7-migration.md
virtualization.md

詳細

TanStack Table

概要

TanStack Table はヘッドレステーブルライブラリです。状態管理とロジックを提供しますが、UI は提供しません。描画は独自に実装し、並べ替え、フィルタリング、ページネーション、選択などは TanStack Table が処理します。

使用する場面: 並べ替え、フィルタリング、ページネーションに対応した複雑なデータテーブル、サーバーサイドのデータ、大規模なデータセット(仮想化を使用した 1000 行以上のデータ)、行の選択/展開/グループ化。

使用しない場面: シンプルな静的テーブル(<table> を直接使用)、表示のみのリスト(リストコンポーネントを使用)、スプレッドシートのような編集(AG Grid を検討)。

クイックリファレンス

パターンAPI / 設定主なポイント
基本的なテーブルuseReactTable({ data, columns, getCoreRowModel })再レンダリングを防ぐため、data と columns をメモ化する
カラムヘルパーcreateColumnHelper<T>()型安全なカラム定義
カラムグループcolumnHelper.group({ header, columns })ネストされたヘッダー。グループカラムは固定しない
並べ替えgetSortedRowModel() + onSortingChangeサーバーサイドでは manualSorting: true を使用
フィルタリングgetFilteredRowModel() + onColumnFiltersChangeサーバーサイドでは manualFiltering: true を使用
ページネーションgetPaginationRowModel() + onPaginationChangemanualPagination: true + pageCount
行の選択enableRowSelection + onRowSelectionChange選択キーを安定させるため getRowId を設定する
カラムの表示/非表示onColumnVisibilityChangecolumn.toggleVisibility() で切り替える
カラムの固定enableColumnPinning + initialState.columnPinningグループカラムは固定しない(既知のバグ)
行の展開getExpandedRowModel() + getSubRowsネスト/ツリー構造のデータに使用
カラムのリサイズenableColumnResizing + columnResizeModeリアルタイム更新には onChange、パフォーマンス重視には onEnd
行のグループ化getGroupedRowModel() + aggregationFn10k 行以上ではパフォーマンスが低下する
サーバーサイドmanual*: true フラグ + state を queryKey に含める適切に再取得するため、すべての state をクエリキーに含める
無限スクロールuseInfiniteQuery + ページの平坦化最適なパフォーマンスを得るには TanStack Virtual と組み合わせる
仮想化@tanstack/react-virtual の useVirtualizerコンテナが非表示の場合(タブ/モーダル)は無効にする
React 19 Compiler'use no memo' ディレクティブv9 でコンパイラーとの互換性が修正されるまでは必須

よく使う操作

タスクメソッド
カラムを並べ替えるcolumn.toggleSorting()
カラムをフィルタリングするcolumn.setFilterValue(value)
最初のページtable.firstPage()
次のページtable.nextPage()
前のページtable.previousPage()
最後のページtable.lastPage()
ページに移動するtable.setPageIndex(n)
行を選択するrow.toggleSelected()
カラムを非表示にするcolumn.toggleVisibility()
元のデータを取得するrow.original
カラムを固定するcolumn.pin('left')
カラムをリサイズするheader.getResizeHandler()
行を展開するrow.toggleExpanded()

行モデル

インポート用途
getCoreRowModel必須
getSortedRowModel並べ替え
getFilteredRowModelフィルタリング
getPaginationRowModelページネーション
getExpandedRowModel展開
getGroupedRowModelグループ化
getFacetedRowModelファセットフィルターの件数
getFacetedUniqueValuesファセットごとの一意な値
getFacetedMinMaxValuesファセットごとの最小値/最大値

よくある間違い

間違い正しいパターン
data/columns の参照が不安定useMemo でメモ化するか、コンポーネントの外で定義する
サーバーサイド用の manual* フラグがないmanualPagination、manualSorting、manualFiltering を設定する
クエリキーにテーブルの状態がないpagination、sorting、filters を queryKey に含める
@tanstack/table-core からインポートする@tanstack/react-table からインポートする
v7 の useTable/Header/accessor を使用するv8 の useReactTable/header/accessorKey を使用する
グループ列を固定する親列ではなく、グループ内の個々の列を固定する
1 万件以上の行をグループ化するサーバーサイドでグループ化するか、大規模なデータセットでは無効にする
ページ変更時に列フィルターがクリアされないフィルター変更時に pageIndex を 0 にリセットする
React Compiler で 'use no memo' がないuseReactTable を使用するコンポーネントにディレクティブを追加する
行選択で getRowId がない選択キーを安定させるため、getRowId: (row) => row.id を設定する
フィルター値の型が一致しない値の型を一致させ、null ではなく undefined でクリアする

委任

  • テーブルパターンの調査:Explore エージェントを使用
  • サーバー統合のレビュー:Task エージェントを使用
  • コードレビュー:code-reviewer エージェントに委任

tanstack-query スキルが利用できる場合は、データ取得、キャッシュ、無限クエリのパターンをそのスキルに委任してください。 tanstack-virtual スキルが利用できる場合は、単独での仮想化パターンをそのスキルに委任してください。 tanstack-router スキルが利用できる場合は、サーバーサイドのテーブル状態に関する URL 検索パラメーターの同期をそのスキルに委任してください。 tanstack-start スキルが利用できる場合は、サーバーサイドのデータ読み込み用サーバー関数をそのスキルに委任してください。

参考資料

コメント