페이지네이션
페이지네이션 컴포넌트
개요
Pagination 컴포넌트는 많은 데이터를 여러 페이지로 나누어 표시할 때 사용합니다. 이전/다음 버튼과 페이지 번호 버튼을 제공하며, 현재 페이지를 시각적으로 강조합니다.
기본 사용법
currentPage, totalPages, onPageChange props를 전달하여 사용합니다.
실제 예제 (총 10페이지):
현재 페이지: {page}
component.tsx
import { useState } from 'react';
import { Pagination } from 'podo-ui';
export default function MyComponent() {
const [currentPage, setCurrentPage] = useState(1);
return (
<Pagination
currentPage={currentPage}
totalPages={10}
onPageChange={setCurrentPage}
/>
);
}많은 페이지 수
페이지가 많을 경우 기본적으로 5개씩 묶어서 표시됩니다. 현재 페이지가 속한 그룹의 페이지들만 보여집니다.
실제 예제 (총 20페이지):
현재 페이지: {page}
표시 페이지 수 변경
maxVisiblePages prop으로 한 번에 표시할 최대 페이지 수를 조절할 수 있습니다.
실제 예제 (한 번에 3개씩 표시):
현재 페이지: {page}
component.tsx
<Pagination
currentPage={currentPage}
totalPages={15}
onPageChange={setCurrentPage}
maxVisiblePages={3}
/>Props
PaginationProps
interface PaginationProps {
currentPage: number; // 현재 페이지 (1부터 시작)
totalPages: number; // 전체 페이지 수
onPageChange: (page: number) => void; // 페이지 변경 콜백
maxVisiblePages?: number; // 표시할 최대 페이지 수 (기본: 5)
}주요 기능
- 이전/다음 페이지 이동 버튼
- 페이지 번호 직접 선택
- 현재 페이지 시각적 강조
- 페이지 그룹화 (5개씩 또는 사용자 지정)
- 첫 페이지/마지막 페이지에서 버튼 자동 비활성화
- 접근성(Accessibility) 지원
실제 사용 예제
데이터 목록과 함께 사용하는 완전한 예제입니다:
list-with-pagination.tsx
import { useState } from 'react';
import { Pagination } from 'podo-ui';
export default function DataList() {
const [currentPage, setCurrentPage] = useState(1);
const itemsPerPage = 10;
// 전체 데이터
const allItems = Array.from({ length: 95 }, (_, i) => `Item ${i + 1}`);
// 현재 페이지의 데이터만 추출
const startIndex = (currentPage - 1) * itemsPerPage;
const currentItems = allItems.slice(startIndex, startIndex + itemsPerPage);
const totalPages = Math.ceil(allItems.length / itemsPerPage);
return (
<div>
<ul>
{currentItems.map((item, index) => (
<li key={startIndex + index}>{item}</li>
))}
</ul>
<Pagination
currentPage={currentPage}
totalPages={totalPages}
onPageChange={setCurrentPage}
/>
</div>
);
}