따라서 리액트 쿼리 옵션에서는 당연히 지원을 하고 있다
refetchOnWindowFocus, // 브라우저에 포커스가 들어온 경우
refetchOnMount, // 새로운 컴포넌트 마운트가 발생한 경우
refetchOnReconnect, // 네트워크 재연결이 발생한 경우
staleTime, //default: 0
gcTime, //default: 5분 (60 * 5 * 1000)
staleTime,
gcTime
이건 뭔데요?staleTime
gcTime
추가로 사용자가 특정 이벤트가 발생했을 때 Refetching을 하도록 설정 가능
대부분 전역상태 라이브러리(redux, recoli)의 경우 Client 데이터를 관리하는데 로직이 집중되어있기 때문!
→ Server 데이터까지 효율적으로 관리하기에는 한계
이러한 문제에 대한 해결책을 보도록 하자
queryKey를 통하여 내부적으로 데이터 재요청, 캐싱, 쿼리를 공유하기 위해 사용한다.
// 컴포넌트 내에서 isPending과 error 상태를 통해
// 현재 쿼리의 상태를 쉽게 처리할 수 있다!
function Example() {
const { isPending, error, data } = useQuery({
queryKey: ['repoData'],
queryFn: () =>
fetch('https://api.github.com/repos/TanStack/query').then((res) =>
res.json(),
),
})
if (isPending) return 'Loading...'
if (error) return 'An error has occurred: ' + error.message
return (
<div>
<h1>{data.name}</h1>
<p>{data.description}</p>
<strong>👀 {data.subscribers_count}</strong>{' '}
<strong>✨ {data.stargazers_count}</strong>{' '}
<strong>🍴 {data.forks_count}</strong>
</div>
)
}
결론적으로 Client 데이터는 상태 관리 라이브러리가 관리
Server 데이터는 리액트 쿼리가 관리하는 구조
짜잔~ Client 데이터와 Server 데이터를 온전하게 분리!!