Skip to content

생성된 코드 사용하기

생성된 훅으로 쿼리, mutation, 무효화, prefetch를 수행합니다.

코드를 생성하고 나면 생성된 파일을 TanStack Query와 함께 곧바로 사용할 수 있습니다. 이 페이지에서는 쿼리, mutation, 무효화, prefetch/SSR 같은 흔한 패턴을 다룹니다.

쿼리

import { useQuery } from "@tanstack/react-query";
import { contactQueries } from "@/api/contact";
function ContactDetail({ id }: { id: number }) {
const { data, isLoading, error } = useQuery(contactQueries.getContact({ contactId: id }));
if (isLoading) return <p>로딩 중…</p>;
if (error) return <p>{error.response?.data.message}</p>;
return <h1>{data?.name}</h1>;
}

동일한 옵션을 useSuspenseQuery에서도 사용할 수 있습니다.

const { data } = useSuspenseQuery(contactQueries.getContact({ contactId: id }));
// ^? Detail (non-nullable under Suspense)

Mutation

import { useCreateContact } from "@/api/contact";
const { mutate, isPending } = useCreateContact();
mutate({ body: { name: "홍길동", phoneNumber: "010-0000-0000" } });

path 파라미터와 body가 함께 있는 엔드포인트라면, 그 둘을 동일한 단일 객체 하나에 담습니다.

import { useUpdateContact } from "@/api/contact";
const { mutate } = useUpdateContact();
mutate({ contactId: 1, body: { name: "새 이름" } });

무효화

import { useQueryClient } from "@tanstack/react-query";
import { useCreateContact } from "@/api/contact";
import { contactQueries } from "@/api/contact";
function useCreateContactAndRefresh() {
const queryClient = useQueryClient();
return useCreateContact({
onSuccess: () => {
// everything under the "contact" controller
queryClient.invalidateQueries({ queryKey: ["contact"] });
// or one specific query
queryClient.invalidateQueries({ queryKey: contactQueries.getContact({ contactId: 1 }).queryKey });
},
});
}

Prefetch / SSR

import { QueryClient } from "@tanstack/react-query";
import { contactQueries } from "@/api/contact";
const queryClient = new QueryClient();
await queryClient.prefetchQuery(contactQueries.getContact({ contactId: 1 }));

관련 문서

  • Advanced Features — 헤더 파라미터, 파일 업로드, 식별자가 아닌 파라미터 이름.
  • Error Type — 타입이 적용된 error.response?.data.