React App에서 비동기 로직을 쉽게 다루게 해주는 라이브러리입니다.
Query는 4가지의 상태를 가집니다.
fresh
상태에서 staleTime(default:0)
이후 stale
상태로 변경cacheTime
지나기전 User 쿼리 인스턴스가 새롭게 mount 되면, fetch 실행하며, fresh
한 값을 가저오는 동안 캐시 데이터를 보여줌fresh
➡ stale
상태로 변경되는데 소요되는 시간fresh
상태인 경우 쿼리 인스턴스가 새롭게 mount되도, 네트워크 fetch
가 발생하지 않음staleTime
이 지나지 않았다면, unmount 이후 mount 되어도 fetch
가 발생하지 않음default : 0
staleTime을 변경하여 리엑트 쿼리애개 캐시된 데이터를 얼마나 자주 최신화 시켜줘야 하는지 알려줄 수 있다.
stale time에 대한 정확한 모범답안은 없다. tkdodo 블로그에 따르면 (react query maintainer) 최소 20초 정도면 중복 호출 문제를 해결할 수 있다고 설명되어 있음
staletime
시간을 늘려 fresh
상태로 길게 유지할 수 있습니다.cacheTime
시간을 늘려 GC
처리되는 기간을 늘릴 수 있습니다.refetch
가 발생하는 trigger 조건을 off
처리하기refetchOnMount
, refetchOnWindowFocus
, refetchOnReconnect
const usePost = () => {
const queryData = useQuery(
queries.posts.getPosts(page, limit).queryKey,
getPostsApi,
{
staleTime: 600000, // 10 minutes
cacheTime: 3600000, // 1 hours
refetchOnMount: false,
refetchOnWindowFocus: false,
refetchOnReconnect: false,
},
);
}
refetchInterval
을 통해 데이터의 변화를 지속적으로 감시할 수 있습니다.
const postData = useQuery(
queries.posts.getPosts(page, limit).queryKey,
getPostsApi,
{
refetchInterval: 60000 // every minute;
}
))