728x90
반응형
const ProductsList = () => {
const [currentPage, setCurrentPage] = useState(1);
const {data: products, isLoading, isError} = useQuery('products', ProductsList);
const handlePageChange = newPage => {
setCurrentPage(newPage);
};
return (
<>
<BottomProducts page={currentPage} />
<Pagination
currentPage={currentPage}
itemsPerPage={5}
totalItems={products.length}
onPageChange={handlePageChange}
/>
</>
);
};
const Pagination = ({currentPage, itemsPerPage, totalItems, onPageChange}) => {
const totalPage = Math.ceil(totalItems / itemsPerPage);
const handlePrevClick = () => {
const prevPage = currentPage - 1;
if (prevPage >= 1) {
onPageChange(prevPage);
}
};
const handleNextClick = () => {
const nextPage = currentPage + 1;
if (nextPage <= totalPage) onPageChange(nextPage);
};
return (
<PageWrapper>
<span>{`${currentPage} / ${totalPage}`}</span>
<ButtonWrapper>
<Button onClick={handlePrevClick} text="<" disabled={currentPage === 1}></Button>
<Button onClick={handleNextClick} text=">" disabled={currentPage === totalPage}></Button>
</ButtonWrapper>
</PageWrapper>
);
};
export default Pagination;
반응형
'React' 카테고리의 다른 글
[React] 드래그 가능한 사이즈 조절 컴포넌트 구현 (2) | 2024.09.22 |
---|---|
리액트 폴더구조 : 재귀적으로 컴포넌트 구조 (0) | 2024.07.28 |
리액트 : Redux-toolkit 다크모드 (with. Tailwindcss) (0) | 2024.03.24 |
리액트 : 반응형 사이드 바 (햄버거 메뉴 🍔 ) (0) | 2024.01.02 |
React : 리액트 쿼리 LifeCycle (+ isLoading, isFetching) (0) | 2023.12.21 |