[10일차] 무한스크롤 사진(🛠️~ing)

h-a-n-a·2023년 8월 16일

💫Ed Sheeran

목록 보기
10/24

무한스크롤 사진이 계속 반복된다는 걸 깨달았다.

//src/api/axios.ts
import axios, {
  InternalAxiosRequestConfig,
  AxiosResponse,
  AxiosError,
  HttpStatusCode,
} from 'axios';

export const getPhotosPage = async (pageParam = 1, options = {}) => {
  const response = await axios.get('/api', {
    params: {
      query: 'ed sheeran',
      display: 20,
      filter: 'large',
      sort: 'date',
      start: `${pageParam}`,
    },
    headers: {
      'X-Naver-Client-Id': import.meta.env.VITE_NAVER_CLIENT_ID,
      'X-Naver-Client-Secret': import.meta.env.VITE_CLIENT_SECRET,
    },
  });
  console.log('response', response.data.items);
  return response.data.items;
};
//src/hooks/usePhotos.ts
import { useState, useEffect } from 'react';
import { getPhotosPage } from '@src/api/axios';

const usePhotos = (pageNum = 1) => {
  const [results, setResults] = useState([]);
  const [isLoading, setIsLoading] = useState(false);
  const [isError, setIsError] = useState(false);
  const [error, setError] = useState({});
  const [hasNextPage, setHasNextPage] = useState(false);

  useEffect(() => {
    setIsLoading(true);
    setIsError(false);
    setError({});

    const controller = new AbortController();
    const { signal } = controller;
    getPhotosPage(pageNum, { signal })
      .then((data) => {
        setResults((prev) => [...prev, ...data]);
        console.log(pageNum);
        setHasNextPage(Boolean(data.length));
        setIsLoading(false);
      })
      .catch((e) => {
        setIsLoading(false);
        if (signal.aborted) return;
        setIsError(true);
        setError({ message: e.message });
      });

    return () => controller.abort();
  }, [pageNum]);
  return { isLoading, isError, error, results, hasNextPage };
};
export default usePhotos;

페이지가 넘어가지 않아 생기는 문제인가? 라고 생각해 page번호를 콘솔에 찍어보았으나 페이지는 잘 넘어가고 있었다. 네트워크로 확인해봐도 start번호는 계속 바뀌고 있었다. 근데 왜 사진은 계속 반복되는 거지?

이미지 API를 제공받은 네이버 개발자 센터에도 들어가봤으나, 21년 이후로는 더이상 답변을 작성해주지 않는듯했다. ( 둘러보던 중, 개인적으로 궁금했던 내용 - 네이버 초록창에 검색할 때 나오는 이미지랑 네이버 이미지 API가 제공해주는 사진의 결과물이 다른 이유에 대해 질문을 남긴 사람이 있었으나, 답변은 없었다...)

혹시 total 개수가 너무 적어서(221개였다) 그렇게 보이는 건가? 싶어 한 번에 보여줄 수 있는 개수인 display를 10개로도 수정해보았으나, 앞에서 렌더링되었던 그 10개가 계속 다시 나오는 것 같다. 나오는 것 같다는 이유는 특정한 몇 개는 계속 반복되고, 몇 개는 이상하게 또 새로운 게 나온다. 도저히 이유를 모르겠다.

이것도 해보고, 저것도 해보다가 일단은 display 최대숫자인 100으로 구현해놓는 걸로 마무리했다. 찜찜해서 일단 계속 수정해나갈 생각이다.


오늘의 내 심경:

profile
하루하루가 연습이니 내일은 더 강해질 겁니다

0개의 댓글