TanStack Table

728x90

TanStack Table은 React에서 **표(table)**를 만들기 위한 헤드리스(Headless) 라이브러리입니다.
즉, HTML 테이블 구조나 스타일을 직접 만들게 하고, 내부 동작(정렬, 필터, 페이지네이션 등)은 라이브러리가 담당합니다.

1. 특징

항목 설명
Headless UI는 직접 만들고, 로직만 라이브러리가 제공
빠르고 가볍다 DOM 조작 없이 React state 기반으로 동작
고도로 커스터마이징 가능 원하는 스타일이나 구성대로 테이블 구현 가능
기능 분리형 구조 정렬, 필터링, 페이지네이션 등을 필요한 것만 가져다 씀

2. 설치

npm install @tanstack/react-table

 

3. 기본 사용 예제 (React 19 기준)

① 컬럼/데이터 정의

const data = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 32 },
];

const columns = [
  {
    header: '이름',
    accessorKey: 'name',
  },
  {
    header: '나이',
    accessorKey: 'age',
  },
];

② 테이블 훅 사용

import {
  useReactTable,
  getCoreRowModel,
  flexRender,
} from '@tanstack/react-table';

function MyTable() {
  const table = useReactTable({
    data,
    columns,
    getCoreRowModel: getCoreRowModel(),
  });

  return (
    <table>
      <thead>
        {table.getHeaderGroups().map((headerGroup) => (
          <tr key={headerGroup.id}>
            {headerGroup.headers.map((header) => (
              <th key={header.id}>
                {flexRender(header.column.columnDef.header, header.getContext())}
              </th>
            ))}
          </tr>
        ))}
      </thead>

      <tbody>
        {table.getRowModel().rows.map((row) => (
          <tr key={row.id}>
            {row.getVisibleCells().map((cell) => (
              <td key={cell.id}>
                {flexRender(cell.column.columnDef.cell, cell.getContext())}
              </td>
            ))}
          </tr>
        ))}
      </tbody>
    </table>
  );
}

 

4. 주요 기능

기능 설명
useReactTable 테이블 상태 및 동작을 구성하는 메인 훅
getCoreRowModel 기본 행 모델 (기초 렌더링용)
getFilteredRowModel 필터링된 행 모델
getSortedRowModel 정렬된 행 모델
getPaginationRowModel 페이지네이션된 행 모델
flexRender() JSX로 동적 렌더링 시 유용하게 사용하는 함수

5. 확장 기능 예시

필요한 기능만 선택해서 넣을 수 있음:

useReactTable({
  data,
  columns,
  getCoreRowModel: getCoreRowModel(),
  getSortedRowModel: getSortedRowModel(),
  getFilteredRowModel: getFilteredRowModel(),
  getPaginationRowModel: getPaginationRowModel(),
});
728x90

'React' 카테고리의 다른 글

React Query  (1) 2025.05.13
라우트 가드(Route Guard)  (0) 2025.05.13
코드 스플리팅(Code Splitting)  (0) 2025.05.11
중첩 라우팅(Nested Routing)  (0) 2025.05.11
react-router-dom  (0) 2025.05.11