staleTime과 gcTimeconst {
data,
// ...
} = useQuery({
queryKey: ["super-heroes"],
queryFn: getAllSuperHero,
gcTime: 5 * 60 * 1000, // 5분
staleTime: 1 * 60 * 1000, // 1분
});
(number | Infinity)fresh에서 stale 상태로 변경되는 데 걸리는 시간, 만약 staleTime이 3000이면 fresh 상태에서 3초 뒤에 stale로 변환fresh 상태일 때는 쿼리 인스턴스가 새롭게 mount 되어도 네트워크 요청(fetch)이 일어나지 않는다.0이기 때문에 일반적으로 fetch 후에 바로 stale이 된다.(number | Infinity)inactive 상태일 때 캐싱 된 상태로 남아있는 시간(밀리초)이다.inactive 상태로 변경되며, 캐시는 gcTime만큼 유지된다.가비지 콜렉터로 수집된다.inactive 된 시점을 기준으로 캐시 데이터 삭제를 결정한다.5분이다. SSR 환경에서는 Infinity이다.const {
data,
// ...
} = useQuery({
queryKey: ["super-heroes"],
queryFn: getAllSuperHero,
refetchOnMount: true,
});
boolean | "always" | ((query: Query) => boolean | "always")stale 상태일 경우, mount마다 refetch를 실행하는 옵션이다.true이다.always로 설정하면 마운트 시마다 매번 refetch를 실행한다.false로 설정하면 최초 fetch 이후에는 refetch 하지 않는다.const {
data,
// ...
} = useQuery({
queryKey: ["super-heroes"],
queryFn: getAllSuperHero,
refetchOnWindowFocus: true,
});
boolean | "always" | ((query: Query) => boolean | "always")stale 상태일 경우, 윈도우 포커싱 될 때마다 refetch를 실행하는 옵션이다.true이다.always로 설정하면 항상 윈도우 포커싱 될 때마다 refetch를 실행한다는 의미이다.const {
data,
// ...
} = useQuery({
queryKey: ["super-heroes"],
queryFn: getAllSuperHero,
refetchInterval: 2000,
refetchIntervalInBackground: true,
});
💡 `Polling(폴링)`이란?
실시간 웹을 위한 기법으로 "`일정한 주기(특정한 시간`)"를 가지고 `서버와 응답을 주고받는 방식`이 폴링 방식이다.
react-query에서는 "`refetchInterval`", "`refetchIntervalInBackground`"을 이용해서 구현할 수 있다.
number | false | ((data: TData | undefined, query: Query) => number | false)시간(ms)를 값으로 넣어주면 일정 시간마다 자동으로 refetch를 시켜준다.booleanrefetchInterval과 함께 사용하는 옵션이다.const {
data,
refetch,
// ...
} = useQuery({
queryKey: ["super-heroes"],
queryFn: getAllSuperHero,
retry: 10, // 오류를 표시하기 전에 실패한 요청을 10번 재시도합니다.
});
(boolean | number | (failureCount: number, error: TError) => boolean)실패하면 useQuery를 특정 횟수만큼 재요청하는 옵션이다.false인 경우, 실패한 쿼리는 기본적으로 다시 시도하지 않는다. true인 경우에는 실패한 쿼리에 대해서 무한 재요청을 시도한다.숫자를 넣을 경우, 실패한 쿼리가 해당 숫자를 충족할 때까지 요청을 재시도한다.3, 서버 환경에서는 0이다.const {
data,
// ...
} = useQuery({
queryKey: ["super-heroes"],
queryFn: getAllSuperHero,
select: (data) => {
const superHeroNames = data.data.map((hero) => hero.name);
return superHeroNames;
},
});
return (
<div>
{data.map((heroName, idx) => (
<div key={`${heroName}-${idx}`}>{heroName}</div>
))}
</div>
);
(data: TData) => unknown반환된 데이터의 일부를 변환하거나 선택할 수 있다.const placeholderData = useMemo(() => generateFakeHeroes(), []);
const {
data,
// ...
} = useQuery({
queryKey: ["super-heroes"],
queryFn: getAllSuperHero,
placeholderData: placeholderData,
});
TData | (previousValue: TData | undefined; previousQuery: Query | undefined,) => TDatapending 상태인 동안 특정 쿼리에 대한 placeholder data로 사용된다.gcTime/staleTime: staleTime은 data가 fresh에서 stale로 변경되기까지의 시간, gcTime은 data가 사용되지 않거나 inactive 상태일 때 stale 유지하는 시간refetchOnMount: 데이터가 stale 상태일 경우, mount마다 refetch를 실행. always로 설정하면 마운트 시마다 매번 refetch를 실행. false로 설정하면 최초 fetch 이후에는 refetch 하지 않는다.truerefetchOnWindowFocus : 데이터가 stale 상태일 경우 윈도우 포커싱 될 때마다 refetch를 실행하는 옵션. truepolling: 일정한 주기(특정한 시간)"를 가지고 서버와 응답을 주고받는 방식refetchInterval: 시간(ms)를 값으로 넣어주면 일정 시간마다 자동으로 refetchrefetchIntervalInBackground : 탭/창이 백그라운드에 있는 동안 refetch, refetchInterval 와 같이 사용.retry: 쿼리가 실패하면 useQuery를 특정 횟수만큼 재요청하는 옵션3, 서버 환경에서는 0select: 쿼리 함수에서 반환된 데이터의 일부를 변환하거나 선택할 수 있다. placeholderData: 쿼리가 pending 상태인 동안 특정 쿼리에 대한 placeholder data로 사용https://github.com/ssi02014/react-query-tutorial?tab=readme-ov-file#refetchonmount