무한 스크롤 구현하기

이재협·2022년 3월 23일
0

Intersection Observer 이용

내가 작성한 코드

  const postList = async (categoryData, pageNumber, sort) => {
    await axios
      .get(`${process.env.REACT_APP_API_URL}/articles/lists`, {
        params: {
          category: categoryData,
          page: pageNumber,
          sort: sort,
        },
      })
      .then((listData) => {
        let articleList = listData.data.data.articleList;
        console.log(articleList);
        if (listData.data.data.articleList.length === 0) {
          setIsLoding(false);
        } else {
          setIsLoding(true);
          articleList = articleList.map((elem) => {
            let postImageKey = elem.image;
            elem.image = `https://d2fg2pprparkkb.cloudfront.net/${postImageKey}?w=115&h=115&f=webp&q=90`;
            return elem;
          });
          dispatch({
            type: 'SHOW_MORE_POSTLIST',
            payload: listData.data.data.articleList,
          });
        }
      })
      .catch((err) => {
        console.log(err);
      });
  };

  const pageEnd = useRef();
  useEffect(() => {
    if (isLoding) {
      const observer = new IntersectionObserver(
        (entries) => {
          if (entries[0].isIntersecting) {
            setPageNumber((prevPageNumber) => prevPageNumber + 1); // 페이지 넘버를 바꿔준다.
          }
        },
        { threshold: 0 }
      );
      observer.observe(pageEnd.current);
    }
  }, [isLoding]);

참고사이트

profile
코딩만을 잘하는 개발자가 아닌 문제를 해결하는 개발자가 되어보자

0개의 댓글

관련 채용 정보