이 가이드를 읽기 전에 Important Defaults를 꼼꼼히 읽어주세요.
이 캐싱 예시는 캐싱의 스토리와 수명 주기를 설명합니다:
Default cacheTime
5분과 기본 staleTime
0
을 사용한다고 가정해 보겠습니다.
useQuery({ queryKey: ['todos'], queryFn: fetchTodos })
의 새 인스턴스가 마운트됩니다.['todos']
쿼리 키로 다른 쿼리가 수행되지 않았으므로 이 쿼리는 하드 로딩 상태를 표시하고 데이터를 fetching을 위해 네트워크 요청을 수행합니다.['todos']
키 아래에 캐시됩니다.staleTime
(기본값은 0
또는 즉시)이 지나면 데이터를 stale으로 표시합니다.useQuery({ queryKey: ['todos'], queryFn: fetchTodos })
의 두 번째 인스턴스는 다른 곳에 마운트됩니다.['todos']
키에 대한 데이터가 이미 있으므로 해당 데이터가 캐시에서 즉시 리턴됩니다.fetchTodos
쿼리 함수가 동일한지 여부에 관계없이 쿼리 키가 동일하기 때문에 두 쿼리의 status
(isFetching
, isLoading
및 기타 관련 값 포함)가 모두 업데이트된다는 점에 유의하세요.['todos']
키 아래의 캐시 데이터가 새 데이터로 업데이트되고 두 인스턴스 모두 새 데이터로 업데이트됩니다.useQuery({ queryKey: ['todos'], queryFn: fetchTodos })
쿼리의 두 인스턴스가 모두 언마운트되어 더 이상 사용되지 않습니다.cacheTime
을 사용하여 설정됩니다(기본값은 5분).useQuery({ queryKey: ['todos'], queryFn: fetchTodos })
의 다른 인스턴스가 마운트됩니다. 이 쿼리는 백그라운드에서 fetchTodos 함수가 실행되는 동안 사용 가능한 캐시된 데이터를 즉시 리턴합니다. 성공적으로 완료되면 새로운 데이터로 캐시를 채웁니다.useQuery({ queryKey: ['todos'], queryFn: fetchTodos })
의 마지막 인스턴스를 언마운트합니다.useQuery({ queryKey: ['todos'], queryFn: fetchTodos })
의 인스턴스가 나타나지 않습니다.['todos']
키 아래에 캐시된 데이터가 삭제되고 가비지 수집됩니다.Reference