
stale : 신선하지 않은, 오래된
React Query의 v4부터 변경된 라이브러리 명
yarn add @tanstack/react-query
v4부터는 query key를 반드시 배열 형태로 사용해야 한다.
useQuery(["todos"], getTodos)
active(fetching, fresh, stale) -> inactive -> deleted
- 캐시 데이터에 대한 life cycle
- 각각의 캐시 데이터마다 생명 주기를 갖고 있다.
active : 캐시 데이터를 사용하고 있는 화면
fetching => fresh (새거) / stale (헌거)
stale => 계속 queryFn을 실행하며 fresh data를 가져온다.
inactive : 현재 화면이 캐시 데이터를 사용하지 않는다.
isLoading : 새로운 캐시 데이터를 서버에서 받고 있는가?
캐시 데이터가 있는 경우 isLoading은 false, isFetching은 true
isFetching : 서버에서 데이터를 받고 있는가?
useQuery(["todos"], getTodos, { enabled: true })
boolean type: true or false
true인 경우에만 queryFn 실행
enabled 옵션이 없을 경우, 기본값으로 true 로 생각하고 useQuery 자동실행됨.
const { data, refetch } = useQuery(["todos"], getTodos, {
enabled: false
});
return (
<div>
<button onClick={() => refetch()}>데이터 불러오기</button>
</div>
);
// Get the user
const { data: user } = useQuery({
queryKey: ['user', email],
queryFn: getUserByEmail,
})
const userId = user?.id
// Then get the user's projects
const {
status,
fetchStatus,
data: projects,
} = useQuery({
queryKey: ['projects', userId],
queryFn: getProjectsByUser,
enabled: !!userId
})
userId가 들어와야 쿼리가 실행된다.
queryFn 에 의해 리턴된 값을 변형시킨 후에 useQuery 의 리턴 data로 넘겨준다.
...
const { data } = useQuery(['user'], fetchUser, {
select: (user) => user.username,
})
return <div>Username: {data}</div>
...