React에서 비동기를 쉽게 다루게 해주는 라이브러리
글로벌 상태관리 라이브러리(Redux, MobX 등) 없이 서버에서 데이터를 가져오고
그 데이터를 모든 컴포넌트에서 사용 가능하게 캐싱하거나, 그 이외에도 주기적으로 데이터 패칭,
Optimistic Updates(데이터 변경을 요청 후 실제로 요청이 성공하기 전 미리 UI만 변경한 뒤, 서버의
응답에 따라 다시 롤백하거나 업데이트 된 상태로 UI를 놔두는 것) 등을 지원
우선 사용하고자 하는 컴포넌트를 QueryClientProvider
컴포넌트로 감싸주고 QueryClient
값을 Props로 넣어줘야 한다.
앱 전체에서 사용하고자하면 최상위 컴포넌트에 감싸주면 된다.
import React from 'react';
import './App.css';
import { QueryClientProvider, QueryClient } from 'react-query';
const queryClient = new QueryClient();
const App = () => {
return (
<QueryClientProvider client={queryClient}>
<div className="App"></div>
</QueryClientProvider>
);
};
export default App;
데이터 가져올 때 사용한다.
const requestData = useQuery(queryKey, queryFn, options)
// 문자열
useQuery('todos', ...)
// 배열
useQuery(['todos'], ...)
const { data, isLoading, error } = useQuery(['todos', id], () => axios.get(`http://.../${id}`));
useQuery('todos', fetchTodos);
useQuery(['todos', todoId], () => fetchTodoById(todoId));
useQuery(['todos', todoId], async () => {
const data = await fetchTodoById(todoId);
return data
});
useQuery(['todos', todoId], ({ queryKey }) => fetchTodoById(queryKey[1]));
옵션 값으로는 다양한 옵션이 지정 가능하다.