Get StartedFoundationsComponentsPatternsRulesDevelopAI & ToolsUpdates

Table Pagination

데이터 테이블에서 대량의 데이터를 페이지 단위로 나누고, 페이지 이동과 페이지당 표시 행 수를 제어하는 컴포넌트예요.

설치

pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/table-pagination.json

Anatomy

  • Rows Per Page: 페이지당 표시할 행 수를 선택하는 컨트롤이에요. [{n}개 ▾] 씩 보기 형식으로 표시돼요. 선택 값이 바뀌면 범위 표시와 현재 페이지가 함께 업데이트돼요.
  • Page Range Select: 현재 보고 있는 데이터의 범위와 전체 수량을 표시해요. (예: 1-10 / 총 320개)
  • Previous Button: 이전 페이지로 이동해요.
  • Next Button: 다음 페이지로 이동해요.

Properties

State

Dropdown

Rows Per Page와 Page Range Select는 열림/닫힘(open / closed) 상태를 가지며, 트리거는 Enabled, Pressed, Focus, Disabled 상태를 가져요.

Previous / Next Button

  • Enabled: 기본 상태예요.
  • Hover: 커서가 올라간 상태예요.
  • Focus: 키보드 탐색 시 포커스를 받은 상태예요.
  • Pressed: 클릭하는 순간의 상태예요.
  • Disabled: 이동할 페이지가 없는 상태예요. Pagination과 달리 숨기지 않고 비활성화해요.

데이터가 없으면 0-0 / 총 0개 를 표시해요. 페이지 범위 선택기와 이전·다음 버튼은 비활성화되지만 페이지당 행 수는 바꿀 수 있어요.

Controlled

value 는 page 와 pageSize 를 하나의 값으로 관리해요. 페이지당 행 수를 바꾸면 페이지가 1로 초기화되고 onValueChange 가 한 번 호출돼요.

onValueChange 의 두 번째 인자는 변경 원인을 나타내는 reason 과 변경 전 값인 previousValue 를 제공해요.

reason발생 조건
previous이전 페이지 버튼을 선택했을 때
next다음 페이지 버튼을 선택했을 때
page-range표시 범위를 선택했을 때
page-size페이지당 행 수를 바꿨을 때
constraint외부에서 전달한 페이지가 유효 범위를 벗어나 보정됐을 때

Unknown Total

전체 개수를 아직 알 수 없다면 totalItems 를 생략하고 hasPreviousPage, hasNextPage 를 전달해요. 이 모드에서는 현재 범위를 텍스트로만 표시하며 전체 개수와 페이지 범위 선택기는 표시하지 않아요.

currentPageItemCount 를 전달하면 마지막 페이지처럼 행 수가 적은 범위를 정확히 표시해요. 생략하면 pageSize 만큼 있다고 가정해요.

Guidelines

데이터 테이블과 함께 사용하기

데이터 테이블에서 사용자의 주요 행동은 페이지 번호로 이동하는 것보다 정렬, 필터로 원하는 데이터를 찾거나 순차적으로 훑어보는 것이에요. 일반 Pagination 대신 한 번에 몇 개를 볼지, 지금 어느 범위를 보고 있는지, 전체가 몇 개인지 한눈에 파악할 수 있는 Table Pagination을 사용해요.

Table Pagination은 항상 한 줄로 표시돼요. 좁은 화면에서는 표와 Table Pagination을 같은 overflow-x: auto 컨테이너 안에 두어 가로 스크롤을 제공해요.

10개 씩 보기1-10 / 총 320개
Do· 테이블 하단에 배치

Table Pagination은 데이터 테이블 하단에 배치해요.

10개 씩 보기1-10 / 총 320개
Don't· 테이블 상단에 배치

데이터 테이블 상단에 배치하지 않아요.

Rows Per Page 옵션 구성하기

[{n}개 ▾] 씩 보기 형식으로 표시하며, 10, 25, 50을 기본 옵션으로 제공하는 것을 권장해요. 데이터의 성격과 사용 맥락에 따라 pageSizeOptions 로 조정할 수 있으며, 옵션은 3~4개를 넘지 않도록 해요.

Page Range Select 옵션 구성하기

Page Range Select의 옵션은 {시작}-{끝} 형식으로 각 페이지 범위를 나열해요. (예: 1-10, 11-20, 21-30 …) 전체 수량이 확정되지 않은 경우에는 드롭다운 없이 텍스트로만 표시해요.

Menu의 기본 최대 높이는 480px이지만, Page Range Select에서 열리는 Menu는 최대 높이를 240px로 제한해요. 옵션이 많아져도 드롭다운이 지나치게 길어지지 않도록 스크롤로 처리해요.

페이지 수가 200개 이하면 모든 페이지 범위를 자동으로 표시해요. 200개를 넘으면 첫 페이지, 마지막 페이지, 현재 페이지 주변을 합쳐 최대 200개만 표시해요. 표시할 페이지를 직접 정하려면 pageOptions 를 전달해요.

Table Pagination VS Pagination

Table Pagination은 데이터 테이블 전용이에요. 검색 결과, 게시판 목록 등 콘텐츠 탐색이 목적이라면 Pagination을 사용하고, 두 컴포넌트를 섞어 쓰지 않도록 주의해요.

Table PaginationPagination
사용 맥락데이터 테이블검색 결과, 게시판, 콘텐츠 목록
핵심 컨트롤Rows Per Page + Page Range SelectPage Link + Previous/Next Button
현재 위치 표시Page Range SelectPage Link에 Selected 상태 표시
페이지 이동Page Range Select로 선택Page Link 클릭
이전/다음 끝 처리disabledhidden

접근성

루트는 페이지당 행 수 설정과 페이지 이동을 묶는 group 으로 렌더링돼요. 기본 접근성 이름은 표 페이지 탐색 이며, 같은 화면에 표가 여러 개 있으면 aria-label 이나 aria-labelledby 로 대상을 구분해요.

페이지를 바꾼 뒤의 로딩 상태와 결과 안내는 Table Pagination이 아니라 연결된 데이터 표 영역에서 제공해요.

Props

Prop

Type

On this page