Pagination & Infinite Scroll

sjy·2022년 4월 2일
0

코딩공부

목록 보기
4/49

게시글이나 댓글 등 목록화 되어있는 데이터를 받아올 때 한꺼번에 모든 데이터를 받아올 수 없기때문에 일정 양만큼 나누어 받아와야 한다.
예를 들어 게시판의 게시글이 999개가 있을 때, 한 페이지에 10개의 게시글씩 나눈다면 100개의 페이지가 생길 것이다.
이런 작업을 Paginiation이라고 한다.
pagination에는 목록 하단에 페이지 리스트를 띄우는 방법과 스크롤을 할 때 추가 데이터를 받아오는 방법이 있다.
개인적으로 전자는 pc환경에 더 적합하고(네이버 카페 등) 후자는 모바일에 더 맞는다고 생각한다(instargram등).
pagination 형식1

const onClickPage = (e) => {
    refetch({ page: Number(e.target.id) });
    // setNowPage(Number(e.target.id));
  };
  const onClickPrevPage = () => {
    if (startPage === 1) return;
    setStartPage((prev) => prev - 10);
    refetch({ page: startPage - 10 });
  };
  const onClickNextPage = () => {
    if (lastPage - startPage < 10) {
      return;
    }
    setStartPage((prev) => prev + 10);
    refetch({ page: startPage + 10 });
  };

  // 현 페이지 바로 다음, 이전 넘어가기
  // const [nowPage, setNowPage] = useState(1);
  // const onClickPrevPage = () => {
  //   refetch({ page: nowPage - 1 });
  //   setNowPage(Number(nowPage - 1));
  // };
  // const onClickNextPage = () => {
  //   refetch({ page: nowPage + 1 });
  //   setNowPage(Number(nowPage + 1));
  // };
  return (
    <div>
    
      <span onClick={onClickPrevPage}>이전</span>
      {/* 페이지 목록  */}
      {new Array(10).fill(1).map(
        (_, index) =>
          index + startPage <= lastPage && (
            <span
              key={index + startPage}
              onClick={onClickPage}
              id={String(index + startPage)}
            >
              {` `}
              {index + startPage}
            </span>
          )
      )}
      {` `}
      <span onClick={onClickNextPage}>다음</span>
    </div>
  );

주석처리한 부분은 다음 10페이지로 넘어가는 것이 아니라 바로 다음 페이지(예 3->4)로 넘어가는 방식이다.

이렇게 직접 코드를 짤수도 있고 library에 있는 기능을 활용할수도 있다.
페이지네이션 라이브러리(바로가기)

스크롤방식의 라이브러리(바로가기)

profile
수학과 코딩

0개의 댓글