가장 큰 이유는 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
로 미리 렌더링하기useInfiniteQuery
PrefetchQuery