
yarn add @tanstack/react-query
yarn add @tanstack/react-query-devtools
설치후 아래와 같이 세팅해주었다.
import { RouterProvider } from "react-router-dom";
import router from "./routes/routing";
import GlobalStyle from "./styles/global";
import { ChakraProvider } from "@chakra-ui/react";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: 1000 * 60,
retry: 1,
},
mutations: {
retry: 1,
},
},
});
function App() {
return (
<QueryClientProvider client={queryClient}>
<ChakraProvider>
<GlobalStyle />
<RouterProvider router={router} />
</ChakraProvider>
</QueryClientProvider>
);
}
export default App;
QueryClientProvider로 감싸고 queryClient에 dafult 값을 설정해준다.
v5부터 인자를 객체로 전달하는 형태로 변경되어 다음과 같이 작성해주어야한다.
import { useQuery } from '@tanstack/react-query';
const query = useQuery({
queryKey: ['todo'],
queryFn: fetchTodo
});
export const fetchTodo = async () => {
const data = await fetchTodoResponse();
return data;
};
queryKey는 캐시를 관리하기 위한 키값으로 배열형태로 사용된다.
string 형태로 해쉬해 key와 data를 mapping시켜 관리한다.
queryFn는 promise를 반환하는 함수이다. (fetch, axios 등)
data를 resolve하고 error를 던진다.
{select: data => {id: data.id, data: data.data}}서버의 데이터를 수정할 때 사용!
import { useMutation } from '@tanstack/react-query'
const query = useMutation({
queryFn: fetchTodo
});
React의 Suspense for Data Fetching API를 사용하기 위한 hook
Suspense for Data Fetching API란?
데이터를 불러오는 동안 fallback UI를 대신 보여주는 기능
const query = useSuspenseQuery({...});
위와 같이 사용하면 데이터 타입을 보장할 수 있다!
단, Query와는 다르게 enabled, placeholderData 옵션을 사용할 수 없고
throwOnError값을 임의로 지정할 수 없고 에러가 발생시 자동으로 에러 바운더리로 에러를 전파한다.
어떤 방식으로 데이터를 저장하길래 전역적으로 사용이 가능할까?

export const QueryClientContext = React.createContext<QueryClient | undefined>(undefined,)
this.#query = new Map<string, Query>()
이후 fetch된 데이터를 query 객체 내부에 저장
