React 프로젝트에서 Server와 Client 사이 비동기 로직들을 손쉽게 다루게 해주는 도구
공식 문서: https://react-query.tanstack.com/
참고 영상: https://www.youtube.com/watch?v=MArE6Hy371c
하는 작업을 간단하게 만든다
// Queries
const query = useQuery('todos', getTodos) // queryKey === ['todos']
// Array
useQuery(['todo',5],...) // querykey === ['todo', 5]
useQuery(['todo', 5, {preview: true}], ...) // queryKey === ['todo', 5, {preview: true}]
useQuery(['todo', {type: 'done'}]...) // queryKey === ['todo', {type: 'done'}]
관련 내용
https://github.com/tannerlinsley/react-query/releases/tag/v4.0.0-alpha.1
onSuccess, onError, onSettled : query fetching 성공/실패/완료 시 실행할 Side Effect정의
enabled: 자동으로 query를 실행시킬지 말지 여부
retry : query 동작 실패 시, 자동으로 retry할지 결정하는 option
select: 성공 시 가져온 data를 가공해서 전달
keepPreviousData: 새롭게 fetching 시 이전 데이터 유지 여부
refetchInterval: 주기적으로 refetch할 지 결정하는 option
컴포넌트에 선언한 것을 가져와서 사용하면 편리 // 도메인별로 묶어서 관리
query가 여러 개일 때
function App(){
const usersQuery = useQuery('users', fetchUsers)
const teamsQuery = useQuery('teams', fetchTeams)
const projectsQuery = useQuery('projects', fetchProjects)
...
const mutation = useMutation(newTodo => {
return axios.post('/todos', newTodo)
})
const {
data,
error,
isError,
isIdle,
isLoading,
isPaused,
isSuccess,
mutate,
mutateAsync,
reset,
status,
} = useMutation(mutationFn, {
} = useMutation(mutationFn, {
mutationKey,
onError,
onMutate,
onSettled,
onSuccess,
retry,
retryDelay,
useErrorBoundary,
meta,
})
백그라운드에서 stale response를 revalidate 하는 동안 캐시가 가진 stale response를 반환
cacheTime: 메모리에 얼마만큼 있을건지 (해당시간 이후 GC에 의해 처리, default 5분)
staleTime: 얼마의 시간이 흐른 후에 데이터를 stale 취급할 것인지 (default 0)
fresh
상태에서 staleTime
(deafult = 0)이후 stale
상태로 변경cacheTime
(default = 5min)만큼 유지되다가 가비지 콜렉터로 수집됨fresh
-> stale
상태일 때 캐싱된 상태로 남아있는 시간inactive
상태로 변경되며, 캐시는 cacheTime
만큼 유지된다.cacheTime
이 지나면 가비지 콜렉터로 수집된다.cacheTime
이 지나기 전에 쿼리 인스턴스가 다시 마운트 되면, 데이터를 fetch하는 동안 캐시 데이터를 보여줌