React Query 통합 설정
1. 의존성 설치
다음 의존성을 설치해야 합니다.
- npm
- yarn
- pnpm
- bun
- deno
npm install @trpc/server @trpc/client @trpc/react-query @tanstack/react-query
yarn add @trpc/server @trpc/client @trpc/react-query @tanstack/react-query
pnpm add @trpc/server @trpc/client @trpc/react-query @tanstack/react-query
bun add @trpc/server @trpc/client @trpc/react-query @tanstack/react-query
deno add npm:@trpc/server npm:@trpc/client npm:@trpc/react-query npm:@tanstack/react-query
AI 에이전트
AI 코딩 에이전트를 사용하는 경우, 더 나은 코드 생성을 위해 tRPC 스킬을 설치하세요:
bashnpx @tanstack/intent@latest install
bashnpx @tanstack/intent@latest install
2. AppRouter 가져오기
AppRouter 타입을 클라이언트 애플리케이션에 가져옵니다. 이 타입은 전체 API의 구조를 포함합니다.
utils/trpc.tstsimport type { AppRouter } from '../server/router';
utils/trpc.tstsimport type { AppRouter } from '../server/router';
팁
import type를 사용하면 참조가 컴파일 타임에 제거되므로, 서버 측 코드가 클라이언트에 의도치 않게 가져와지는 것을 방지할 수 있습니다. 자세한 내용은 TypeScript 문서를 참조하세요.
3. tRPC 훅 생성
AppRouter 타입 시그니처를 사용하여 createTRPCReact로 강력하게 타입 지정된 React 훅 집합을 생성합니다.
utils/trpc.tstsimport {createTR PCReact } from '@trpc/react-query';importtype { AppRouter } from '../server/router'; export const trpc = createTRPCReact<AppRouter>();
utils/trpc.tstsimport {createTR PCReact } from '@trpc/react-query';importtype { AppRouter } from '../server/router'; export const trpc = createTRPCReact<AppRouter>();
4. tRPC 프로바이더 추가
tRPC 클라이언트를 생성하고, 아래처럼 애플리케이션을 tRPC 프로바이더로 감싸야 합니다. 또한 더 자세히 문서화된 React Query를 설정하고 연결해야 합니다.
팁
애플리케이션에서 이미 React Query를 사용하는 경우, 이미 가지고 있는 QueryClient와 QueryClientProvider를 반드시 재사용해야 합니다.
App.tsxtsximport {QueryCli ent, QueryClientProvider } from '@tanstack/react-query';import{ httpBatchLink } from '@trpc/client'; importReact, { useState } from 'react'; import { trpc } from './utils/trpc';exportfunction App() { const [queryClient] = useState (() => new QueryClient()); const [trpcClient] = useState(() =>trpc.createClient({ links: [httpBatchLink({url: 'http://localhost:3000/trpc',// You can pass any HTTP headers you wish hereasync headers() {return {authorization: getAuthCookie(),};},}),],}),);return (<trpc.Provider client={trpcClient} queryClient={queryClient}><QueryClientProvider client={queryClient}>{/* Your app here */}</QueryClientProvider> </trpc.Provider>);}
App.tsxtsximport {QueryCli ent, QueryClientProvider } from '@tanstack/react-query';import{ httpBatchLink } from '@trpc/client'; importReact, { useState } from 'react'; import { trpc } from './utils/trpc';exportfunction App() { const [queryClient] = useState (() => new QueryClient()); const [trpcClient] = useState(() =>trpc.createClient({ links: [httpBatchLink({url: 'http://localhost:3000/trpc',// You can pass any HTTP headers you wish hereasync headers() {return {authorization: getAuthCookie(),};},}),],}),);return (<trpc.Provider client={trpcClient} queryClient={queryClient}><QueryClientProvider client={queryClient}>{/* Your app here */}</QueryClientProvider> </trpc.Provider>);}
노트
컴포넌트 외부에서 선언하는 대신 useState를 queryClient와 TRPCClient 생성에 사용하는 이유는, SSR을 사용할 때 각 요청이 고유한 클라이언트를 받도록 보장하기 위함입니다. 클라이언트 사이드 렌더링을 사용하는 경우 원하는 대로 이동할 수 있습니다.
5. 데이터 가져오기
이제 tRPC React Query 통합을 사용하여 API에서 쿼리와 뮤테이션을 호출할 수 있습니다.
pages/IndexPage.tsxtsximport { trpc } from '../utils/trpc';exportdefault function IndexPage() { const userQuery = trpc.getUser.useQuery({ id: 'id_bilbo' });constuserCreator = trpc.createUser.useMutation(); return (<div><p>{userQuery.data?.name}</p><button onClick={() => userCreator.mutate({ name: 'Frodo' })}>Create Frodo</button></div>);}
pages/IndexPage.tsxtsximport { trpc } from '../utils/trpc';exportdefault function IndexPage() { const userQuery = trpc.getUser.useQuery({ id: 'id_bilbo' });constuserCreator = trpc.createUser.useMutation(); return (<div><p>{userQuery.data?.name}</p> <button onClick={() => userCreator.mutate({ name: 'Frodo' })}>Create Frodo</button></div>);}