![[CODE] usePagination [9/6 study]](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FIbYf2%2FbtsJthSdc76%2FAAAAAAAAAAAAAAAAAAAAANl5oOKL__jd6ghgG6qQnn2MQo3rrwRleoVyuXwkogO_%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DWp94J7t8q0YI62Wm08L6Fwq%252BtBY%253D)
[CODE] usePagination [9/6 study]Frontend/CODE2024. 9. 6. 16:33
Table of Contents
usePagination - 페이지네이션을 만들 때 작성한 코드
프로젝트 하면서 작성한 코드를 기록하는 게시물입니다!
import type { Dispatch, SetStateAction } from 'react';
import { useMemo } from 'react';
interface UsePaginationReturn {
currentPage: number;
goToNextSet: () => void;
goToPage: (page: number) => void;
goToPreviousSet: () => void;
pageNumbers: number[];
}
const usePagination = (totalPages: number, currentPage: number, setCurrentPage: Dispatch<SetStateAction<number>>): UsePaginationReturn => {
const goToPage = (page: number) => {
if (page >= 1 && page <= totalPages) {
setCurrentPage(page);
}
};
const goToNextSet = () => {
const nextPage = Math.ceil(currentPage / 5) * 5 + 1;
if (nextPage <= totalPages) {
goToPage(nextPage);
} else {
goToPage(totalPages);
}
};
const goToPreviousSet = () => {
const previousPage = Math.floor((currentPage - 1) / 5) * 5;
if (previousPage >= 1) {
goToPage(previousPage);
} else {
goToPage(1);
}
};
// 현재 페이지 그룹 시작 번호 계산
const startPage = useMemo(() => Math.floor((currentPage - 1) / 5) * 5 + 1, [currentPage]);
// 현재 페이지 그룹 마지막 번호 계산
const endPage = useMemo(() => Math.min(startPage + 4, totalPages), [startPage, totalPages]);
// 페이지 번호 배열 계산
const pageNumbers = useMemo(() => Array.from({ length: endPage - startPage + 1 }, (_, i) => startPage + i), [startPage, endPage]);
return {
currentPage,
pageNumbers,
goToPage,
goToNextSet,
goToPreviousSet,
};
};
export default usePagination;
@동혁이 :: Eun_Frontend
프론트엔드 공부일지 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!