영화 리뷰 사이트 프로젝트(MOVIELOG) 진행 중, 유저들이 작성한 리뷰들을 보여주는 방법을 고민하는 과정에서 팀원들과 상의 후 페이지네이션을 이용하기로 결정했다.
무한스크롤과 페이지네이션 중 고민했지만, 리뷰에 있어서는 모든 리뷰를 열람하고 싶은 유저도 있을 것이고 아닌 유저도 있을 것이기 때문에 무한스크롤보다는 유저에게 선택권을 주어 다음 리뷰목록을 유저가 직접 클릭해서 볼 수 있는 페이지네이션이 이 상황에선 더 적절하다고 생각했다.
// DetailsPage.tsx
const [searchParams] = useSearchParams();
const page = searchParams.get('page');
const pageNumber = Number(page || 1);
위와 같이 설정해주었다. 이 코드를 통해서 각 페이지마다 페이지 번호(pageNumber)를 얻을 수 있게되었다.
// DetailsPage.tsx
<div className="flex justify-center text-3xl">
<Pagination totalReviews={totalReviews} movieId={movieId} pageNumber={pageNumber} />
</div>
위와 같이 Pagination이라는 컴포넌트를 따로 만들어 페이지 번호를 화면에 렌더링 해주었다. 전달한 props는 현재 유저가 위치한 pageNumber, 현재 위치한 영화를 명시하기 위한 movieId, 페이지네이션 로직구현을 위한 totalReviews 이다.