Nextjs13 + React-Query / useQuery 옵션 정리

2023. 10. 13. 18:05카테고리 없음

Nextjs 13 의 app router 에서는 server component 와 client component 를 각각 따로 지원하는데

 

만약 간단한 Data fetching 만이 목적이라면 굳이 React-Query 를 사용하지 않는게 좋다고 생각한다.

 

그런데 React-Query의 기능들을 몇가지 접하다보니 인기가 있는 이유를 새삼 깨닫는 중이다

 

그중 React-Query 의 가장 기본이라 볼 수 있는 useQuery 에 대해 특히 그 옵션들에 대해 깊게 파헤쳐보자

 

기본세팅은 남자답게 알아서 했다는 전제하에 설명하므로 provider 로 감싸는 정도는 하고 읽기를 바랍니다

 

공식문서를 보면 useQuery 에 required 가 붙어있는 두가지 옵션이 있다.

두개 옵션은 무조건 쓰라는 말인데.

 

1. queryKey 

쉽게 설명하자면 queryKey 의 경우 Data 를 호출해 올 때 '나 앞으로 이름으로 이 데이터를 앞으로 부를꺼야' 라고 칭하는 것과 같다. ( 아님말고 )

 

그럼 다음에 다른 컴포넌트에서 똑같은 데이터를 호출 할 때 만약 데이터가 캐싱 되어있다면 다시 네트워크에 요청을 하는 것이 아니라 백그라운드에서 로딩없이 캐싱된 데이터를 불러올 수 있다.

( cache 모르면 그냥 데이터나 값을 미리 복사해 놓는 임시 저장소 라 생각하자 )

 

배열 안에 문자열 형식으로 저장하며 동적으로 생성하고싶다면 뒤에 id 값 같은걸 같이 줘서 개별적으로 호출도 가능하다

 

2. queryFn 

두번째 필수 옵션으로 queryFn 이 있는데 쉽게 말하면 여기서 데이터 패칭하는 함수를 쓰라는 소리다.

이런식으로

이 두개만 사용해줘도 useQuery 에 기본으로 걸려있는 옵션들 덕분에 자동으로 데이터를 caching 해주거나 refetch 해준다.

 

하지만 우린 프로니까 옵션들을 다 파해쳐 봐야겠지.

3. staleTime 

staleTime

staleTime - 값으로 숫자를 받는데 설정한 시간초 동안 값이 fresh 상태로 유지된다는 말이다.

 

ex) 어떤 도라이가 내가만든 기능을 미친듯이 광클해서 내 서버에 부하가 걸리는 일이 없도록 한번 준 데이터가 fresh 상태라면 한번준 데이터 그대로 다시 주는 시간.

 

default : 0

 

만약 react-query 의 5가지 상태를 모른다면 읽어보고 아님 넘어가자

  • fetching : 요청 상태인 쿼리. 대기중
  • fresh : 새롭게 추가된 쿼리 인스턴스이며, 만료되지 않은 쿼리. 컴포넌트의 mount, update 시에 데이터를 재요청하지 않음(항상 캐시된 데이터를 가져옴)
  • stale : 데이터 패칭이 완료되어 만료된 쿼리. stale 상태의 같은 쿼리를 useQuery로 재호출하여 컴포넌트 마운트를 한다면 캐싱된 데이터가 반환됨.
  • inactive : 비활성 쿼리로써 사용하지 않음. 5분 뒤에 가비지 콜렉터가 캐시에서 제거함.
  • delete : 가비지 콜렉터에 의하여 캐시에서 제거된 쿼리.

4. cacheTime 

cacheTime

cacheTime 도 마찬가지로 값으로 숫자를 받는데 아까 말했듯이 RQ ( react-query ) 는 데이터를 캐싱해주는데 그 캐싱해주는 시간을 정해준다.

 

* 호출한 데이터를 보고있으면 Observer 가 보고있다 생각하면 되는데 그때는 cacheTime 설정한 시간이 흐르지 않고 Observer 가 사라지면 cacheTime 이 지난 후 GC ( 가비지컬렉터 ) 에 의해 삭제된다.

default : 300000

 

5. refetchInterval 

refetchInterval , refetchIntervalInBackground

 

refetchInterval 도 숫자를 값으로 받는데 설정한 시간 지나면 데이터 refetching 해준다.

ex) 주식창보면 그래프 왔다갔다 하는거 생각하면 이해가 잘되더라.

refetchIntervalInBackground refetchInterval 이거 브라우저에 focus 하고 있지 않아도 계속해서 데이터 패칭할까말까 하는 설정

default : false

 

6. enabled 

enabled

enabled 는 생각보다 자주 사용하게 되는 옵션인데 useQuery queryKey queryFn 을 설정해주면 해당 컴포넌트가 Mount 될 때 데이터를 불러올지 말지 정하는 옵션이다.

 

만약 onClick 이벤트가 걸리면 데이터를 불러오고 싶은데 페이지 Mount 되자마자 불러와지면 난감하니까.

 

또 개발중인 페이지 규모가 좀 있으면 useQuery 로 어떤 id 값을 불러왔는데 이 id 값을 이용해서 또 데이터를 불러오는 경우가 간혹 있는데

이런식으로 하면 된다더라. 뭔지는 직접 찾아보시길.

 

7. select 

select 옵션은 useQuery 의 경우 많은 리턴값 중에 data 값을 반환하기 전에 설정한 함수로 가공하고 리턴해주는 옵션이다.

 

백엔드에서 데이터 덜 가공해서 보내주면 내 입맛대로 가공해서 리턴하면 된다.

 

8. initialData 

initialDatauseQuery 의 값을 미리 정해주는 함수인데 만약 다른 컴포넌트에서 다른 queryKey 로 데이터를 호출 하고 cache 가 아직 남아있다면 initialData 를 이용해 데이터의 초기값을 설정해 줄 수 있다.