React Query로 서버 상태 관리하기
if 카카오
useQuery, useMutation 훅들을 사용해 컴포넌트 내부에서 API 요청 및 관리를 수월하게 함.
API 호출 후 내부적으로 관리하는 queryClient를 통해 API 데이터 캐싱.
똑같은 API 요청 시 QueryClient에 저장된 캐시 데이터를 반환.
LocalStorage 관리를 통한 persist data 캐싱,
focus, online 이벤트를 감지해 데이터 갱신
1. queryClient 인스턴스 생성
2. QueryClientProvider를 사용해 queryClient를 전달.
첫번째 파라미터: 각 요청을 구분하기 위한 Query Key
두번째 파라미터: 실제 API 요청을 수행하는
QueryKey는 String / Array를 사용 가능.
Array를 Key로 사용할 경우 item으로 직렬화 가능한 모든 JS 객체 사용 가능.
서버 상태를 수정하기 위해(post, put, delete) useMutation 훅 제공.
useQuery와 비슷하지만 추가적으로 mutate 함수를 제공.
mutate 함수를 통해 원하는 시점에 서버의 데이터를 업데이트할 수 있다.
LocalStorage 관리를 통한 persist data 캐싱,
focus, online 이벤트를 감지해 데이터 갱신
cacheTime: 데이터 캐싱 유지기간
refetchonWindowFocus: 브라우저 focus에 따라 최신 데이터 확인
select: API에서 받은 response 데이터 변경 가능 (데이터 후처리)
enabled: enabled의 값이 false이면 fetch를 실행하지 않고, true일 때 fetch를 실행
API 별로 커스텀 훅을 만들어 사용하면 API를 손 쉽게 관리할 수 있다.
useCategoryListQuery 훅이 카테고리 API를 호출하는 useQuery 훅을 래핑중.
파라미터로 전달된 isPayApp에 따라 API를 요청하게끔 구성.
select 옵션을 통해 응답으로 받은 response 데이터를 변경해 return 값으로 반환
로컬 스토리지 등 JS에서 접근할 수 있는 데이터 store에 QueryClient의 정보를 저장해 사용자의 페이지 이탈, 브라우저 재접속 시 기존 캐싱 정보를 사용해 사용자에게 초기 화면을 빠르게 보여줄 수 있음.
⚠️ persistQueryClient는 아직 실험적인 기능
[react-query] Optimistic Update
React Query unmount시 API 요청을 진행하는 Promise를 Cancel 해 side effect 최소화.