React Query란

Category
스터디노트 React Query
Status
Published
Tags
React Query
Description
Published
Slug
 
리액트 쿼리는 데이터의 캐시 처리를 간편하게 할 수 있는 인터페이스를 제공함
 
  1. 몇 초 이후에는 데이터가 유효하지 않은 것으로 간주하고 데이터를 다시 불러옴
  1. 데이터에 변경점이 있는 경우에만 리렌더링 유발
  1. 유저가 탭을 이동했다가 다시 돌아왔을 때 데이터를 다시 불러온다
  1. 데이터를 다시 호출할 때, 응답이 오기 전까지는 이전 데이터를 계속 보여준다.
    1. → 필요에 따라서는 로딩바와 같은 대안 UI를 보여주기 위해 loading state를 기본적으로 제공
       
기존 프론트엔드 상태 관리 라이브러리
  1. Redux
  1. Recoil
  1. React Query
  1. Recoil
  1. Mobx
  1. SWR
 
배민, 카카오페이 등에서 도입

 
서버 상태에서 생기는 문제
  1. 캐싱
  1. 같은 데이터 요청 중복 제거
  1. 언제 out of date 되는지 알아내기
  1. out of date 된 데이터 백그라운드에서 업데이트
  1. 최대한 빠르게 업데이트 반영하기
  1. paginatiom, lazy loading 등 성능 최적화
  1. 서버 상태의 메모리, garbage collection 관리
  1. structural sharing으로 쿼리 결과 memoizing
  1. etc…
 
리액트 쿼리와 캐싱
stale while revalidate
→ 캐싱된 데이터를 사용자에게 제공하면서, 비동기적으로 콘텐츠를 서버에서 revalidate
notion image
 
notion image
→ 오래된 데이터가 데이터가 없는 것보다 낫다!
 

notion image
쿼리 클라이언트를 선언해 주고, 쿼리 클라이언트의 props로 queryClient를 전달해주게 되면
하위 컴포넌트에서 쿼리 클라이언트에 접근할 수 있음
 
쿼리 클라이언트에서는 전역적으로 옵션을 설정할 수 있음
notion image
 
queries와 mutations에 대한 옵션을 설정해 줌
 
quries : 서버에서 데이터를 받아올 때 사용하는 기능
notion image
queryKey : 캐시를 관리하기 위한 키값으로 배열 형태로 사용
→ string 형태로 해쉬해 key와 data를 mapping시켜 관리
queryFn : promise를 반환하는 함수 (fetch, axios 등)
→ data를 resolve하고 error를 던짐
 
notion image