React-Query

React Query의 useQuery 훅을 사용하여 API 요청을 해보자.

winhwi 2023. 11. 17. 04:48

 

React-Query 공식문서의 최신 버전(v5)에 대한 설치 방법입니다.

 

출처 :https://tanstack.com/query/v5/docs/react/installation

 

 

React-Query를 사용하기 위해서는 QueryClientQueryClientProvider 를 사용하여

 

전역으로 상태를 관리하는 코드를 작성해야 합니다.

 

 

 

 

QueryClient 


일반적으로 애플리케이션의 최상위에서 QueryClient를 생성합니다.

 

QueryClient 는 캐시와 상호 작용하는데 사용할 수 있습니다.

 

 

 

QueryClientProvider


React 애플리케이션에서 QueryClient를 사용할 수 있도록 하는 컴포넌트입니다.

 

애플리케이션의 최상위에서 한 번만 렌더링 되어야 합니다.

 

prop을 통해 QueryClient 인스턴스를 전달하여 하위 컴포넌트에서 Reacy-Query를 사용할 수 있도록 합니다.

 

 

예시 코드 입니다.

 

 

 

 

useQuery


React-Query 라이브러리에서 제공되는 hook 입니다.

 

데이터를 가져오는데 사용됩니다.

 

비동기적으로 데이터를 가져오고 관리하는 데 사용됩니다.

 

queryKeyqueryFn 정의가 필수적 입니다.

 

 

queryKey

 

 

출처 :https://tanstack.com/query/v5/docs/react/guides/query-keys

 

 

공식문서에서의 queryKey 설명입니다.

 

핵심은  queryKey 를 기반으로 쿼리 캐싱을 관리하는 것 입니다.

 

 

queryFn

 

 

출처 :https://tanstack.com/query/v5/docs/react/guides/query-functions

 

 

promise를 반환하는 함수,

 

promise는 데이터를 해결하거나 오류를 발생시켜야 한다고 합니다.

 

 

 

 

useQuery를 사용해 데이터를 조회


예시 코드입니다.

 

 

 

Options


몇가지 옵션에대해 알아보겠습니다.

 

1. enabled : boolean

 

마운트시 쿼리가 자동으로 실행되지 않도록 합니다.

 

종속 쿼리에 사용 할 수 있습니다.

 

 

2. retry : boolean | number | (failureCount : number , error : TError) => boolean

 

false로 설정 되어있다면 실패한 쿼리요청을 재시도 하지 않습니다.

 

true 라면, 무한히 재시도 합니다.

 

number로 설정되는 경우 해당 number만큼 재시도 합니다.

 

기본값은 number 인 3입니다.

 

함수로 설정될 수 있는데, 이 함수는 failureCount 와 error 를 매개변수로 받아서 재시도 여부를 결정합니다.

 

 

3. staleTime : number | Infinity

 

기본값은 0 이고 단위는 ms 입니다.

 

number로 지정한경우 해당 시간동안 fresh상태, 그 후엔 오래된데이터(stale)상태 로 간주합니다. 

 

 

useQuery의 staleTime을 3초로 설정했습니다.

 

Home Page 에서는 지속적으로 네트워크 요청을 보내지만,

 

staleTime을 3초로 설정한 Test Page에서는 데이터가 3초 동안 캐싱되어 있어,

 

네트워크요청을 다시 보내지 않습니다.

 

 

4. refetchOnMount : boolean | "always" | ((query : Query) => boolean | "always")

 

기본값은 true 입니다.

 

true로 설정한다면, 마운트 시 데이터가 stale상태일 경우 refetch 합니다.

 

false로 설정한다면, 마운트 시 refetch 하지 않습니다.

 

"always"로 설정한다면, 마운트 시 항상 refetch 합니다.

 

 

5. refetchOnWindowFocus : boolean | "always" | ((query : Query) => boolean | "always")

 

refetchOnMount와 설정이 동일하지만,

 

차이점은 refetchOnWindowFocus 옵션은 마운트되는 시점이 아닌 윈도우 포커싱에 따라 동작합니다.

 

 

 


 

useQuery의 단편적인 부분에 대해 알아봤습니다.

 

여러가지 옵션을 효과적으로 사용하기 위해 디테일한 공부가 더 필요해보입니다.

 

 

 

'React-Query' 카테고리의 다른 글

React-Query 사용이유 ?  (0) 2023.11.15