Configurer l'intégration React Query
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
1. Installer les dépendances
Les dépendances suivantes doivent être installées :
- 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
2. Importer votre AppRouter
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Importez le type AppRouter dans l'application cliente. Ce type représente la structure complète de votre API.
utils/trpc.tstsimport type {AppRouter } from '../server/router';
utils/trpc.tstsimport type {AppRouter } from '../server/router';
En utilisant import type, vous garantissez que la référence sera supprimée lors de la compilation, évitant ainsi d'importer par inadvertance du code serveur dans votre client. Pour plus d'informations, consultez la documentation TypeScript.
3. Créer les hooks tRPC
Créez des hooks React fortement typés à partir de la signature type de votre AppRouter avec createTRPCReact.
utils/trpc.tstsimport {createTRPCReact } from '@trpc/react-query';import type {AppRouter } from '../server/router';export consttrpc =createTRPCReact <AppRouter >();
utils/trpc.tstsimport {createTRPCReact } from '@trpc/react-query';import type {AppRouter } from '../server/router';export consttrpc =createTRPCReact <AppRouter >();
4. Ajouter les providers tRPC
Créez un client tRPC et encapsulez votre application dans le Provider tRPC, comme ci-dessous. Vous devrez également configurer et connecter React Query, dont la documentation est plus détaillée ici.
Si vous utilisez déjà React Query dans votre application, vous devriez réutiliser le QueryClient et QueryClientProvider existants.
App.tsxtsximport { QueryClient, QueryClientProvider } from '@tanstack/react-query';import { httpBatchLink } from '@trpc/client';import React, { useState } from 'react';import { trpc } from './utils/trpc';export function 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 { QueryClient, QueryClientProvider } from '@tanstack/react-query';import { httpBatchLink } from '@trpc/client';import React, { useState } from 'react';import { trpc } from './utils/trpc';export function 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>);}
L'utilisation de useState pour créer le queryClient et le TRPCClient, plutôt que de les déclarer en dehors du composant, garantit que chaque requête obtient un client unique lors du SSR. Pour le rendu côté client, vous pouvez les déplacer si vous le souhaitez.
5. Récupérer les données
Vous pouvez maintenant utiliser l'intégration tRPC avec React Query pour appeler des queries et mutations sur votre API.
pages/IndexPage.tsxtsximport { trpc } from '../utils/trpc';export default function IndexPage() {const userQuery= trpc.getUser.useQuery({ id: 'id_bilbo' }); const userCreator = 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';export default function IndexPage() {const userQuery= trpc.getUser.useQuery({ id: 'id_bilbo' }); const userCreator = trpc.createUser.useMutation();return (<div><p>{userQuery.data?.name}</p><button onClick={() => userCreator.mutate ({ name: 'Frodo' })}> Create Frodo</button></div>);}