Configurar la integración de React Query
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
1. Instalar dependencias
Debes instalar las siguientes dependencias.
- 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
Si utilizas un agente de IA para programación, instala habilidades de tRPC para una mejor generación de código:
bashnpx @tanstack/intent@latest install
bashnpx @tanstack/intent@latest install
2. Importa tu AppRouter
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Importa el tipo AppRouter en la aplicación cliente. Este tipo contiene la estructura completa de tu API.
utils/trpc.tstsimport type { AppRouter } from '../server/router';
utils/trpc.tstsimport type { AppRouter } from '../server/router';
Al usar import type aseguras que la referencia será eliminada durante la compilación, evitando importar código del servidor en el cliente accidentalmente. Para más información, consulta la documentación de TypeScript.
3. Crear hooks de tRPC
Crea un conjunto de hooks de React fuertemente tipados a partir de la firma de tipo de tu AppRouter usando createTRPCReact.
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. Agregar proveedores de tRPC
Crea un cliente tRPC y envuelve tu aplicación en el Provider de tRPC, como se muestra a continuación. También necesitarás configurar y conectar React Query, lo cual documentan en profundidad.
Si ya usas React Query en tu aplicación, debes reutilizar el QueryClient y QueryClientProvider que ya tienes.
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>);}
La razón para usar useState al crear el queryClient y el TRPCClient, en lugar de declararlos fuera del componente, es garantizar que cada solicitud obtenga un cliente único al usar SSR. Si usas renderizado del lado del cliente, puedes moverlos si lo prefieres.
5. Obtener datos
Ahora puedes usar la integración de tRPC con React Query para llamar a consultas y mutaciones en tu 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>);}