저번 docs 에서 / 경로에서 로컬 파일에 저장된 @/posts 경로에 있는 md 파일들을 불러오는 것 까지 했다.
이제 해야 할 일은 다양한 라우팅 경로에 따라 렌더링 될 페이지를 만드는 것들인데
라우팅을 일으키기 위한 UI 를 마저 생성해주도록 하자
페이지 네비게이션 만들기
페이지 네비게이션 (pagination) 은 말 그대로 페이지들를 네비게이팅 하게 할 수 있는 바이다.
이 때 만약 각 페이지 뿐 아니라 > 와 같은 next page , >> 와 같은 last page 도 존재한다면 좋을 것이다.
다만 next page , last page 같은 경우엔 현재 머무르고 있는 page 에 따라 다르게 렌더링 되어야 하겠지만 말이다.
globalCSS , tailwind.config.ts설정하기
다음과 같이 사용할 svg< , << , > , >> 와 같은 아이콘에 사용 할 svg 파일을 public 폴더에 저장해준 후 해당 폴더의 이미지를 백그라운드로 갖는 클래스명을 정의해주자
이후 globalCSS 에서 정의한 custom class 이름을 tailwind 에서도 인식 할 수 있도록 tailwind.config.ts 에서도 정의해주자
이를 통해 custom class 이름을 이용해 bg-[custom class name] 처럼 사용 할 수 있게 되었다.
getPageList
해당 로직을 구현하기 위해서는 적절한 페이지 번호들을 가져와야 한다.
페이지 번호를 가져오기 위해 설정해야 하는 변수들이 존재한다.
POSTS_PER_PAGES : 페이지 별 보여줄 포스트들의 개수
POSTS_PER_PAGES 는 다른 함수나 컴포넌트에서도 사용 할 것이기 때문에 .env.local 파일을 만들어 해당 파일에 정의해주었다.
다음과 같이 currentPage 번호에 따라서 pagination 에 사용될 페이지 리스트들을 가져오는 메소드를 정의해주었다.
currentPage 를 기준으로 좌,우로 prev , next page 의 번호들이 들어가며 대칭적으로 완성되도록 하는 메소드이다.
이 때 만약 대칭적으로 리스트를 만들 수 없을 때 (currentPage 가 3 보다 작거나 totalPosts - 2 보다 클 경우)를 대비하여 넉넉하게 prevPages , nextPages 들을 가져 온 후 MAX_NAV_PAGES 만큼 찰 때 까지 pages 를 채워주도록 하였다.
Pagination 컴포넌트 생성하기
이후 pageList 를 위에서 생성한 getPageList 메소드로 적절한 pageList 를 불러와 렌더링 하는 컴포넌트를 만들었다.
만약 currnetPage 에 따른 Pagination 의 모습은 의도한대로 잘 작동한다.
지금은 실험을 위해 인위적으로 POSTS_PER_PAGES 를 1로 줄여 총 8 페이지까지 가능하게 만들었다.
좀 더 세부적인 디자인들은 나중에 프로토타입이 나온 후 조작해주도록 하고 Pagination 은 여기까지만 하도록 하자 :)