const res = useQuery(('persons'), () => axios.get('http://localhost:8080/persons'), {
staleTime: 5000, // 5초
refetchOnWindowFocus: false, // 윈도우가 다른 곳을 갔다가 다시 화면으로 돌아오면 이 함수를 재실행
retry: 0, // 실패시 재호출 몇번 할지
onSuccess: data => {
// 성공시 호출
console.log(data);
},
onError: e => {
// 실패시 호출 (401, 404 같은 error가 아니라 정말 api 호출이 실패한 경우만 호출됩니다.)
// 강제로 에러 발생시키려면 api단에서 throw Error 날립니다.
console.log(e.message);
}
});
//staleTime: 오래된 데이터로 인식
//cacheTime: 안쓰면, 캐시 가비지 콜렉터가 삭제
//둘다 refetch가 된다.
const { data: todoList, error, isFetching } = useQuery("todos", fetchTodoList);
const { data: nextTodo, error, isFetching } = useQuery(
"nextTodos",
fetchNextTodoList,
{
enabled: !!todoList // true가 되면 fetchNextTodoList를 실행한다
}
);
// useQueries 여러개의 useQuery
const result = useQueries((
{
queryKey: ("getRune", riot.version),
queryFn: () => api.getRunInfo(riot.version)
},
{
queryKey: ("getSpell", riot.version),
queryFn: () => api.getSpellInfo(riot.version)
}
));
useEffect(() => {
console.log(result); // ({rune 정보, data: (), isSucces: true ...}, {spell 정보, data: (), isSucces: true ...})
const loadingFinishAll = result.some(result => result.isLoading);
console.log(loadingFinishAll); // loadingFinishAll이 false이면 최종 완료
}, (result));