Foundation
PackagesUIComponentsTables

DataTable

TanStack Table のレンダリングシェル。テーブルインスタンスを受け取り、Table Elements で描画する。

いつ使うか

  • TanStack Table でデータテーブルを構築するときに使用する
  • ソート、フィルタ、ページネーション、行選択などのインタラクティブ機能が必要なテーブルに使用する

いつ使わないか

  • 静的なデータ表示のみの場合は Table Elements を直接使用する
  • テーブル以外のデータ表示(カードリスト、ツリービュー等)には使わない

Usage

import type { ColumnDef } from '@tanstack/react-table';
import {
  createColumnHelper,
  getCoreRowModel,
  useReactTable,
} from '@tanstack/react-table';

import { DataTable } from '@bi-shop-it/ui/data-table';

type User = {
  email: string;
  name: string;
};

const columnHelper = createColumnHelper<User>();

const columns: ColumnDef<User, string>[] = [
  columnHelper.accessor('name', { header: '名前' }),
  columnHelper.accessor('email', { header: 'メールアドレス' }),
];

const MyComponent = () => {
  const table = useReactTable({
    columns,
    data: users,
    getCoreRowModel: getCoreRowModel(),
  });

  return <DataTable table={table} />;
};

Props

DataTable

Propデフォルト説明
tableTable<TData>TanStack Table のテーブルインスタンス
emptyStateReactNodeデータが0件の場合に表示するコンテンツ。省略時はデフォルトテキスト

状態

デフォルト

TanStack Table インスタンスを渡してデータを描画する基本パターン。

名前メールアドレス部署役割
田中 太郎[email protected]開発部エンジニア
佐藤 花子[email protected]デザイン部デザイナー
鈴木 一郎[email protected]開発部エンジニア
山田 次郎[email protected]営業部マネージャー
高橋 美咲[email protected]デザイン部デザイナー
const columnHelper = createColumnHelper<Employee>();

const columns: ColumnDef<Employee, string>[] = [
  columnHelper.accessor('name', { header: '名前' }),
  columnHelper.accessor('email', { header: 'メールアドレス' }),
  columnHelper.accessor('department', { header: '部署' }),
  columnHelper.accessor('role', { header: '役割' }),
];

const MyComponent = () => {
  const table = useReactTable({
    columns,
    data,
    getCoreRowModel: getCoreRowModel(),
  });

  return <DataTable table={table} />;
};

空の状態

emptyStateEmptyState コンポーネント等を渡すことで、空の状態を自由にカスタマイズできる。

名前メールアドレス部署役割

該当するデータがありません

条件を変更して再度お試しください。

import { EmptyState } from '@bi-shop-it/ui/empty-state';

const table = useReactTable({
  columns,
  data: [],
  getCoreRowModel: getCoreRowModel(),
});

<DataTable
  emptyState={
    <EmptyState
      description="条件を変更して再度お試しください。"
      icon="Search"
      title="該当するデータがありません"
    />
  }
  table={table}
/>;

設計方針

DataTable は レンダリングシェル として設計されている。

  • DataTable の責務: TanStack Table インスタンスのヘッダー・行・セルを Table Elements で描画する
  • 利用側の責務: TanStack Table のインスタンス作成、データ取得、ソート・フィルタ・ページネーション等の機能設定

この設計により、利用側は TanStack Table の全機能を直接制御でき、DataTable 側は表示ロジックに集中できる。

アクセシビリティ

コンポーネントが内部で処理すること

  • Table Elements のセマンティックな HTML 構造を継承する
  • 選択された行に data-state="selected" を付与する

利用者が対応すること

  • 必要に応じて TanStack Table の行選択機能で aria-selected を設定すること
  • テーブルの目的を説明する見出しやラベルをテーブルの外に配置すること

関連コンポーネント

  • Table — 静的なテーブル表示に使用する
  • Card — DataTable をカードでラップして視覚的にグループ化する場合に使用する
  • EmptyState — テーブル外で空の状態を表示する場合に使用する

On this page