DataTable
TanStack Table 기반의 고급 데이터 테이블 컴포넌트입니다. 정렬, 필터링, 페이지네이션, 행 선택 기능을 제공합니다.
개요
DataTable은 TanStack Table(React Table v8)을 기반으로 KRDS 스타일을 적용한 고급 데이터 테이블입니다. 컬럼 정의만으로 정렬, 필터링, 페이지네이션을 쉽게 구현할 수 있습니다.
| 이름 | 이메일 | 역할 | 상태 |
|---|---|---|---|
| 김철수 | kim@example.com | 개발자 | 활성 |
| 이영희 | lee@example.com | 디자이너 | 활성 |
| 박민수 | park@example.com | 기획자 | 대기 |
| 정지원 | jung@example.com | 개발자 | 활성 |
| 최수현 | choi@example.com | QA | 비활성 |
설치
사용법
DataTable과 관련 헬퍼 함수들을 import하여 사용합니다.
예제
정렬
SortableHeader 헬퍼를 사용하여 정렬 가능한 컬럼을 쉽게 구현합니다.
| 상태 | |||
|---|---|---|---|
| 김철수 | kim@example.com | 개발자 | 활성 |
| 이영희 | lee@example.com | 디자이너 | 활성 |
| 박민수 | park@example.com | 기획자 | 대기 |
| 정지원 | jung@example.com | 개발자 | 활성 |
| 최수현 | choi@example.com | QA | 비활성 |
페이지네이션
enablePagination으로 페이지네이션을 활성화합니다. 페이지 크기 옵션도 커스터마이징 가능합니다.
| 상태 | |||
|---|---|---|---|
| 김철수 | kim@example.com | 개발자 | 활성 |
| 이영희 | lee@example.com | 디자이너 | 활성 |
| 박민수 | park@example.com | 기획자 | 대기 |
| 정지원 | jung@example.com | 개발자 | 활성 |
| 최수현 | choi@example.com | QA | 비활성 |
페이지당행총 8개 중 1-5
1 / 2
검색 필터
enableGlobalFilter로 전역 검색 기능을 활성화합니다. 모든 컬럼에서 검색합니다.
| 상태 | |||
|---|---|---|---|
| 김철수 | kim@example.com | 개발자 | 활성 |
| 이영희 | lee@example.com | 디자이너 | 활성 |
| 박민수 | park@example.com | 기획자 | 대기 |
| 정지원 | jung@example.com | 개발자 | 활성 |
| 최수현 | choi@example.com | QA | 비활성 |
| 강민서 | kang@example.com | 개발자 | 활성 |
| 윤서준 | yoon@example.com | 디자이너 | 대기 |
| 임하늘 | im@example.com | 기획자 | 활성 |
행 선택
enableRowSelection으로 체크박스 선택 기능을 활성화합니다. 선택된 행은 onRowSelectionChange 콜백으로 받을 수 있습니다.
| 이름 | 이메일 | 역할 | 상태 | |
|---|---|---|---|---|
| 김철수 | kim@example.com | 개발자 | 활성 | |
| 이영희 | lee@example.com | 디자이너 | 활성 | |
| 박민수 | park@example.com | 기획자 | 대기 | |
| 정지원 | jung@example.com | 개발자 | 활성 | |
| 최수현 | choi@example.com | QA | 비활성 |
커스텀 셀 렌더링
컬럼 정의의 cell 속성을 사용하여 셀 내용을 커스터마이징합니다.
| 이메일 | 상태 | |
|---|---|---|
| 김철수 | kim@example.com | 활성 |
| 이영희 | lee@example.com | 활성 |
| 박민수 | park@example.com | 대기 |
| 정지원 | jung@example.com | 활성 |
전체 기능
정렬, 검색, 페이지네이션, 행 선택을 모두 조합한 완전한 데이터 테이블입니다.
| 상태 | ||||
|---|---|---|---|---|
| 김철수 | kim@example.com | 개발자 | 활성 | |
| 이영희 | lee@example.com | 디자이너 | 활성 | |
| 박민수 | park@example.com | 기획자 | 대기 | |
| 정지원 | jung@example.com | 개발자 | 활성 | |
| 최수현 | choi@example.com | QA | 비활성 |
페이지당행총 8개 중 1-5
1 / 2
로딩 상태
loading prop으로 데이터 로딩 중임을 표시합니다.
| 이름 | 이메일 | 역할 | 상태 |
|---|---|---|---|
로딩 중... | |||
빈 상태
emptyMessage prop으로 데이터가 없을 때 표시할 메시지를 지정합니다.
| 이름 | 이메일 | 역할 | 상태 |
|---|---|---|---|
| 등록된 사용자가 없습니다. | |||
접근성
DataTable은 WCAG 2.1 / KWCAG 2.2 Level AA 기준을 준수합니다.
- 시맨틱 HTML: 내부적으로 HANUI Table 컴포넌트를 사용하여 올바른 테이블 구조를 유지합니다.
- Caption: caption prop으로 테이블의 목적을 설명합니다. 스크린리더에서 sr-only로 숨겨져 있습니다.
- 체크박스 레이블: 행 선택 체크박스에 적절한 aria-label이 제공됩니다.
- 정렬 상태 표시: 정렬 가능한 헤더는 시각적 아이콘과 함께 정렬 상태를 전달합니다.
- 페이지네이션 레이블: 페이지 이동 버튼에 적절한 aria-label이 제공됩니다.
- 키보드 탐색: Tab 키로 상호작용 요소에 접근하고, Enter/Space 키로 동작을 실행할 수 있습니다.