React Query(v4) - 6. Prefetching, isFetching

2022. 12. 30.·🎨 프론트엔드 공부/기타

[유데미] React Query : React로 서버 상태 관리하기

📍Prefetching 장점

- Pagination 구현 후, 유저가 다음 또는 이전 페이지를 클릭하면 fetch가 완료될때까지 Loading element를 봐야 함

- 미리 다음 페이지를 fetch하여 cache 해두면, UI가 매끄럽게 변경되어 UX를 개선할 수 있음

 

📍Prefetching

- cache에 data를 추가 (디폴트 : stale)

- re-fetching 시 이 data를 보여줌 (data는 cacheTime 지나면 소실)

- page 이외에도 유저가 미리 누를 가능성이 높은 탭에 미리 사용하면 좋음

 

📍사용 방법

1️⃣useQueryClient 를 import 한다

2️⃣useEffect 훅을 통해 currentPage가 바뀌면 prefetching을 실행하는 구조를 만든다

3️⃣nextPage 변수에 다음 페이지 번호를 할당한다

4️⃣queryClient.prefetchQuery 함수를 만들고 useQuery와 똑같이 객체를 인수로 전달한다

이 때, currentPage 대신 nextPage를 fetch하게 해주어야 한다.

5️⃣useEffect의 의존성 배열에 queryClient를 추가한다

6️⃣마지막 페이지에서는 prefetching이 필요 없으므로, if 조건문을 추가한다

 

  const queryClient = useQueryClient();

  useEffect(() => {
    if (currentPage < maxPostPage) {
      const nextPage = currentPage + 1;
      queryClient.prefetchQuery({
        queryKey: ["posts", nextPage],
        queryFn: () => fetchPosts(nextPage),
      });
    }
  }, [currentPage, queryClient]);

 

7️⃣이전 페이지 데이터를 캐시해두려면 본래 useQuery의 인수에 keepPreviousData를 true로 설정한다

  const { data, isError, error, isLoading } = useQuery({
    queryKey: ["posts", currentPage],
    queryFn: () => fetchPosts(currentPage),
    staleTime: 2000,
    keepPreviousData: true,
  });

 

📍isLoading vs isFetching

- 아래 코드에서 isLoading 대신 isFetching 을 사용한다면?

  const { data, isError, error, isLoading } = useQuery({
    queryKey: ["posts", currentPage],
    queryFn: () => fetchPosts(currentPage),
    staleTime: 2000,
    keepPreviousData: true,
  });
  // 아래 조건문에서 isLoading 대신 isFetching 을 사용한다면?
  if (isLoading) return <h2>Loading...</h2>;

 

📍isLoading

- cache data가 없음 + isFetching

📍isFetching

- 비동기 함수(promise)가 아직 resolve되지 않은 상태

- cache data가 있건 없건, stale 상태면 re-fetch 발생함

- 따라서 isLoading 대신 isFetching을 사용하면 re-fetch 전까지 짧게 Loading spinner 보여짐

 

'🎨 프론트엔드 공부/기타' 카테고리의 다른 글
  • React Query(v4) - 8. useInfiniteQuery
  • React Query(v4) - 7. Mutation
  • React Query(v4) - 4. [퀴즈] 게시글의 댓글 가져오기
  • React Query(v4) - 3. React Query Dev Tools, Stale, Cache
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (510)
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (86)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
React Query(v4) - 6. Prefetching, isFetching
상단으로

티스토리툴바