- 이전 페이징 처리는 제한없이 데이터에따라 페이지매김 수가 계속 생김
-> 처음으로 가는 버튼과 마지막으로 가는 버튼이 없어서 추가 수정
-> 5페이지씩 보여지게 수정


import React from 'react';
function Pagination({ total, limit, page, setPage }) {
const totalPages = Math.ceil(total / limit);
const handlePrevPage = () => {
setPage((prevPage) => (prevPage === 1 ? prevPage : prevPage - 1));
};
const handleNextPage = () => {
setPage((prevPage) => Math.min(prevPage + 1, totalPages));
};
const handlePageClick = (pageNumber) => {
setPage(pageNumber);
};
const handleFirstPage = () => {
setPage(1);
};
const handleLastPage = () => {
setPage(totalPages);
};
const displayPageNum = 5;
let startPage;
if (page <= displayPageNum) {
startPage = 1;
} else if (page >= totalPages - ((totalPages - 1) % displayPageNum)) {
startPage = totalPages - ((totalPages - 1) % displayPageNum);
} else {
startPage = Math.floor((page - 1) / displayPageNum) * displayPageNum + 1;
}
return (
<div className="pagination">
<ul className="pagination">
<li className="page-item">
<button
className="page-link"
onClick={handleFirstPage}
disabled={page === 1}
>
«
</button>
</li>
<li className="page-item">
<button
className="page-link"
onClick={handlePrevPage}
disabled={page === 1}
>
‹
</button>
</li>
{Array.from({ length: Math.min(displayPageNum, totalPages - startPage + 1) }).map((_, i) => (
<li
key={startPage + i}
className={`page-item ${page === startPage + i ? 'active' : ''}`}
>
<button
className="page-link"
onClick={() => handlePageClick(startPage + i)}
aria-current={page === startPage + i ? 'page' : null}
>
{startPage + i}
</button>
</li>
))}
<li className="page-item">
<button
className="page-link"
onClick={handleNextPage}
disabled={page === totalPages}
>
›
</button>
</li>
<li className="page-item">
<button
className="page-link"
onClick={handleLastPage}
disabled={page === totalPages}
>
»
</button>
</li>
</ul>
</div>
)
}
export default Pagination;