React-Query의 경우 서버 상태를 관리하기 위해 전역으로 데이터를 저장하지 않는다.
React-Query는 전역상태를 저장하고 있는건 아니지만 서버 상태를 cache를 해두었다가 나중에 데이터를 다시 사용할 수 있게 해준다.
React-Query의 캐싱 개념은 Stale과 cacheTime을 통해 이루어진다.
우선, Stale이 무엇인지 먼저 알아보자.
React-Query는 기본적으로 캐싱된 data를 stale한 상태로 여긴다.
(stale의 사전적 의미는 "신선하지 않는"이라는 뜻을 가진다.)
신선하다 함은, 서버에서 조회한 데이터는 그때 당시의 데이터 snapshot이고, 외부 요청으로 서버 데이터가 변경이 되었다면 내 브라우저가 가진 데이터는 이미 오래된 낡은 데이터가 되었으므로 stale하다고 말하는 것이다.
stale이란 최신화가 필요한 데이터라는 의미로 stale한 상태가 되면 아래의 경우에 refetch 된다.
React-Query는 아무 옵션을 설정하지 않으면 캐싱되지 않는다.
refetchOnWindowFocus 옵션 등으로 기본 refetch 설정을 막을 수 있고
staleTime 옵션으로 설정한 시간 동안 데이터가 stale 되지 않도록 해 refetch를 막을 수도 있다.
또한, query에 별다른 action이 없으면 inactive 상태로 캐시에 남아 있다가 5분 뒤에 메모리에서 사라진다.
cacheTime 옵션을 설정해서 이 시간을 조정할 수 있다.
앞서 배운 queries에서 사용하는 useQuery()
Hook을 사용한다.
const { data, isLoading } = useQuery('@getUser', getUser, {
staleTime: Infinity, // default : 0
cacheTime: 5000, // default : 5min
});
import { QueryClient } from '@tanstack/react-query'
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: Infinity,
},
},
})
await queryClient.prefetchQuery({ queryKey: ['posts'], queryFn: fetchPosts })