pagination, infinite scroll 기능을 넣어보는걸 이전부터 추천하길래 많이 어려운 기능인줄 알고 겁먹고 있었는데, 지금 기록하려는 전체 데이터를 잘라서 보여주기만 하는 pagination은 5단계면 된다.
const [page, setPage] = useState(1);
const offset = (page - 1) * 9;
const numPages = Math.ceil(broadcastedRooms.length / 9);
<RoomPaginationBox>
<button onClick={() => setPage(page - 1)} disabled={page === 1}>
<img src={roomListLeftIcon} />
</button>
<span>0{broadcastedRooms.filter((room) => room.participants !== 0).length === 0 ? 0 : page}</span>
<button onClick={() => setPage(page + 1)} disabled={page === numPages}>
<img src={roomListRightIcon} />
</button>
</RoomPaginationBox>
{broadcastedRooms
.filter((room) => room.participants !== 0) // 이건 무시하자
.slice(offset, offset + 9)
.map((room) => (
<RoomCard
key={room.roomId}
room={room}
onJoinClick={() => handleJoinRoomClick(room.roomId)}
isLogined={isLogined}
/>
))}
진행하고 있는 프로젝트에서는 각 페이지마다 버튼으로 만들어져있는게 형태가 아니라 더 간단했을지도 모르지만, 만약 페이지를 숫자 버튼으로 보여준다면 numPages와 page를 잘 활용하면 문제 없을 것이다.
다음엔 서버에서 데이터를 잘라서 받아오는 형식의 infinite scroll 또는 pagination을 구현해보고싶당!