
📅 2025-11-18
➡️ TanStack Query에 대해 새롭게 알게 된 것 또는 헷갈리는 부분 정리
useEffect 기반 방식은 상태 관리와 중복 코드가 많음Redux 미들웨어는 복잡성과 테스트 부담이 큼→ 이를 해결하기 위해 나온 것이 TanStack Query
npm i @tanstack/react-queryQueryClientProvider 적용import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
const queryClient = new QueryClient();
ReactDOM.createRoot(document.getElementById("root")).render(
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>
);🔗 https://tanstack.com/query/v5/docs/framework/react/reference/useQuery
const { data, isPending, isError } = useQuery({
queryKey: ["키값"],
queryFn: async () => {
const res = await axios.get("/api/data");
return res.data;
},
});
queryKey, queryFn → 필수 인자 값queryKeyqueryFnPromise를 반환하는 함수를 넣어야 함dataPromise에서 resolved된 데이터isPendingtrue 반환isErrortrue🔗 https://tanstack.com/query/v5/docs/framework/react/reference/useMutation
const { mutate, isPending, isError } = useMutation({
mutationFn: async (payload) => {
const res = await axios.post("/api/data", payload);
return res.data;
},
onSuccess: () => {
// 성공했을 때 후처리
},
onError: () => {
// 실패했을 때 처리
},
});
onSuccess, onError 메서드를 통해 성공, 실패했을 시 response 데이터를 핸들링 할 수 있음useMutation과 함께 사용하여 데이터가 변경된 후 관련 쿼리를 다시 가져옴const queryClient = useQueryClient();
const { mutate } = useMutation({
mutationFn: async (payload) => {
await axios.post("/api/data", payload);
},
onSuccess: () => {
queryClient.invalidateQueries(["키값"]);
},
});
["키값"]을 넘겨주면 “키값”을 포함하는 모든 쿼리가 무효화 됨useQuery → 서버에서 데이터를 get할 때useMutation → 서버의 data를 post, patch, put, delete와 같이 수정할 때Read)는 useQuery, CUD(Create, Update, Delete)는 useMutation