페이지네이션은 긴 목록을 여러 페이지로 나누어 사용자가 쉽게 탐색할 수 있도록 하는 기능입니다. React를 사용하여 페이지네이션을 구현하는 방법을 배웠습니다.
React 컴포넌트를 만들고 필요한 상태를 정의합니다.
import { useEffect, useState } from "react";
const ITEMS_PER_PAGE = 20; // 페이지당 표시할 아이템 수
const PaginationExample = () => {
const [items, setItems] = useState([]); // 전체 아이템
const [currentPage, setCurrentPage] = useState(1); // 현재 페이지
const [displayedItems, setDisplayedItems] = useState([]); // 현재 페이지에 표시할 아이템
useEffect(() => {
// 데이터 불러오기
const fetchData = async () => {
const response = await fetch('/api/items');
const data = await response.json();
setItems(data);
};
fetchData();
}, []);
useEffect(() => {
// 페이지에 따라 아이템 필터링
const startIndex = (currentPage - 1) * ITEMS_PER_PAGE;
const endIndex = startIndex + ITEMS_PER_PAGE;
setDisplayedItems(items.slice(startIndex, endIndex));
}, [currentPage, items]);
const totalPages = Math.ceil(items.length / ITEMS_PER_PAGE);
const handlePageChange = (page) => {
setCurrentPage(page);
};
return (
<div>
{/* 아이템 표시 */}
<div>
{displayedItems.map(item => (
<div key={item.id}>{item.name}</div>
))}
</div>
{/* 페이지네이션 */}
<div>
{Array.from({ length: totalPages }, (_, index) => (
<button key={index} onClick={() => handlePageChange(index + 1)}>
{index + 1}
</button>
))}
</div>
</div>
);
};
export default PaginationExample;
items
: 전체 아이템 목록.currentPage
: 현재 페이지 번호.displayedItems
: 현재 페이지에 표시할 아이템 목록.useEffect
를 사용하여 컴포넌트가 마운트될 때 데이터 fetching을 수행합니다.Array.from()
을 사용하여 페이지 수만큼 버튼을 생성합니다.handlePageChange
를 호출하여 currentPage
를 업데이트합니다.button {
margin: 0 5px;
}
button.active {
font-weight: bold;
text-decoration: underline;
}
위의 모든 내용을 종합하여 최종 코드를 작성합니다. 필요에 따라 코드에 스타일링을 추가하거나, 오류 처리를 구현할 수 있습니다.
import { useEffect, useState } from "react";
const ITEMS_PER_PAGE = 20; // 페이지당 아이템 수
const PaginationExample = () => {
const [items, setItems] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [displayedItems, setDisplayedItems] = useState([]);
useEffect(() => {
const fetchData = async () => {
const response = await fetch('/api/items');
const data = await response.json();
setItems(data);
};
fetchData();
}, []);
useEffect(() => {
const startIndex = (currentPage - 1) * ITEMS_PER_PAGE;
const endIndex = startIndex + ITEMS_PER_PAGE;
setDisplayedItems(items.slice(startIndex, endIndex));
}, [currentPage, items]);
const totalPages = Math.ceil(items.length / ITEMS_PER_PAGE);
const handlePageChange = (page) => {
setCurrentPage(page);
};
return (
<div>
<div>
{displayedItems.map(item => (
<div key={item.id}>{item.name}</div>
))}
</div>
<div>
{Array.from({ length: totalPages }, (_, index) => (
<button
key={index}
onClick={() => handlePageChange(index + 1)}
className={currentPage === index + 1 ? 'active' : ''}
>
{index + 1}
</button>
))}
</div>
</div>
);
};
export default PaginationExample;
React에서 페이지네이션을 구현하는 방법을 배웠습니다. 데이터 fetching, 상태 관리, 페이지 버튼 생성 등의 과정을 통해 사용자 친화적인 UI를 만들 수 있습니다. 추가적으로 오류 처리와 스타일링을 통해 더욱 완성도 높은 페이지네이션을 구현할 수 있습니다.