가장 큰 이유는 Next13의 fetch 함수는 캐싱이 가능하기 때문이다.
revalidate를 설정하여 다음 요청이 들어올 때 새로운 버전의 페이지를 제공
React-Query의 staleTime과 유사: 데이터가 오래되었을 때 새로 불러오기
revalidateTag로 특정 데이터가 변경되었는지 확인하고, 필요한 경우 최신 상태로 업데이트
React-Query의 Query Invalidation과 유사
두번째 이유는 병렬 비동기 API 요청이 Next13에서도 가능했기 때문이다.
Parallel Routes와 Promise.all 이용→ fetch 함수로도 캐싱을 관리할 수 있는데 굳이 react-Query를 사용해야할 필요성은?
클라이언트 컴포넌트에서 비동기 데이터를 불러와야 할 때는 주로 서버 컴포넌트에서 데이터를 불러와 props로 전달받아 렌더링하거나 useState와 useEffect를 이용해 데이터를 받아왔다.
필터링 옵션이 변경될 때와 같이 사용자 상황에 따른 동적 데이터를 받아와야할 때 비동기 처리 함수를 계속 호출하는 것이 번거로웠다.
queryKey 배열에 변수명을 추가하여 변수명이 변경될 때마다 자동으로 새로운 데이터를 받아올 수 있었다. 비동기 처리 함수를 한 번만 사용해서 동적 데이터 처리가 가능하게 되었다.
컴포넌트 로딩 UI를 렌더링하기 위해서 컴포넌트 외부를 React.Suspense로 감싼 후 fallback에 로딩 컴포넌트를 넣어야했다.
useQuery가 반환하는 isLoading을 이용하여 스피너를 이전보다 간편하게 렌더링하였다.
단순히 클라이언트 컴포넌트에서의 useState, useEffect의 사용이 번거로워서 도입을 했지만 공식 문서를 공부하면서 유용한 기능들을 보게 되었다.
onMutate를 활용한 낙관적 업데이트useInfiniteQuery로 페이지네이션 및 무한 스크롤 구현PrefetchQuery로 미리 렌더링하기useInfiniteQueryPrefetchQuery