Konfigurera med Next.js Pages Router
Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →
Den här guiden gäller för Next.js Pages Router. Om du använder Next.js App Router, se istället konfigurationsguiden för App Router.
Rekommenderad filstruktur
Vi rekommenderar en filstruktur som denna, även om tRPC inte kräver den specifikt. Detta är vad du kommer att se i våra exempel. Resten av denna sida guidar dig genom processen att lägga till tRPC i denna struktur.
graphql.├── prisma # <-- if prisma is added│ └── [..]├── src│ ├── pages│ │ ├── _app.tsx # <-- add `withTRPC()`-HOC here│ │ ├── api│ │ │ └── trpc│ │ │ └── [trpc].ts # <-- tRPC HTTP handler│ │ └── [..]│ ├── server│ │ ├── routers│ │ │ ├── _app.ts # <-- main app router│ │ │ ├── post.ts # <-- sub routers│ │ │ └── [..]│ │ ├── context.ts # <-- create app context│ │ └── trpc.ts # <-- procedure helpers│ └── utils│ └── trpc.ts # <-- your typesafe tRPC hooks└── [..]
graphql.├── prisma # <-- if prisma is added│ └── [..]├── src│ ├── pages│ │ ├── _app.tsx # <-- add `withTRPC()`-HOC here│ │ ├── api│ │ │ └── trpc│ │ │ └── [trpc].ts # <-- tRPC HTTP handler│ │ └── [..]│ ├── server│ │ ├── routers│ │ │ ├── _app.ts # <-- main app router│ │ │ ├── post.ts # <-- sub routers│ │ │ └── [..]│ │ ├── context.ts # <-- create app context│ │ └── trpc.ts # <-- procedure helpers│ └── utils│ └── trpc.ts # <-- your typesafe tRPC hooks└── [..]
Lägg till tRPC i befintligt Next.js-projekt
1. Installera beroenden
- npm
- yarn
- pnpm
- bun
- deno
npm install @trpc/server @trpc/client @trpc/react-query @trpc/next @tanstack/react-query@latest zod
yarn add @trpc/server @trpc/client @trpc/react-query @trpc/next @tanstack/react-query@latest zod
pnpm add @trpc/server @trpc/client @trpc/react-query @trpc/next @tanstack/react-query@latest zod
bun add @trpc/server @trpc/client @trpc/react-query @trpc/next @tanstack/react-query@latest zod
deno add npm:@trpc/server npm:@trpc/client npm:@trpc/react-query npm:@trpc/next npm:@tanstack/react-query@latest npm:zod
Om du använder en AI-kodningsagent, installera tRPC-färdigheter för bättre kodgenerering:
bashnpx @tanstack/intent@latest install
bashnpx @tanstack/intent@latest install
Next.js-integrationen är i själva verket en kombination av vår React Query-integration och några Next.js-specifika integrationer.
2. Aktivera strikt läge
Om du vill använda Zod för validering av indata, se till att du har aktiverat strikt läge i din tsconfig.json:
tsconfig.jsondiff"compilerOptions": {+ "strict": true}
tsconfig.jsondiff"compilerOptions": {+ "strict": true}
Om strikt läge är för restriktivt bör du åtminstone aktivera strictNullChecks:
tsconfig.jsondiff"compilerOptions": {+ "strictNullChecks": true}
tsconfig.jsondiff"compilerOptions": {+ "strictNullChecks": true}
3. Skapa en tRPC-router
Initiera din tRPC-backend i src/server/trpc.ts med funktionen initTRPC och skapa din första router. Här skapar vi en enkel "hello world"-router och procedur - för djupgående information om att skapa ditt tRPC-API bör du konsultera:
-
Snabbstartsguiden och Backend-dokumentationen för tRPC-information
-
Next.js Adapter-dokumentationen för att montera tRPC i din Next.js-server.
View sample backend
server/trpc.tstsimport {initTRPC } from '@trpc/server';// Avoid exporting the entire t-object// since it's not very descriptive.// For instance, the use of a t variable// is common in i18n libraries.constt =initTRPC .create ();// Base router and procedure helpersexport constrouter =t .router ;export constprocedure =t .procedure ;
server/trpc.tstsimport {initTRPC } from '@trpc/server';// Avoid exporting the entire t-object// since it's not very descriptive.// For instance, the use of a t variable// is common in i18n libraries.constt =initTRPC .create ();// Base router and procedure helpersexport constrouter =t .router ;export constprocedure =t .procedure ;
server/routers/_app.tstsimport {z } from 'zod';import {procedure ,router } from '../trpc';export constappRouter =router ({hello :procedure .input (z .object ({text :z .string (),}),).query ((opts ) => {return {greeting : `hello ${opts .input .text }`,};}),});// export type definition of APIexport typeAppRouter = typeofappRouter ;
server/routers/_app.tstsimport {z } from 'zod';import {procedure ,router } from '../trpc';export constappRouter =router ({hello :procedure .input (z .object ({text :z .string (),}),).query ((opts ) => {return {greeting : `hello ${opts .input .text }`,};}),});// export type definition of APIexport typeAppRouter = typeofappRouter ;
pages/api/trpc/[trpc].tstsimport * astrpcNext from '@trpc/server/adapters/next';import {appRouter } from '../../../server/routers/_app';// export API handler// @link https://trpc.io/docs/server/adaptersexport defaulttrpcNext .createNextApiHandler ({router :appRouter ,createContext : () => ({}),});
pages/api/trpc/[trpc].tstsimport * astrpcNext from '@trpc/server/adapters/next';import {appRouter } from '../../../server/routers/_app';// export API handler// @link https://trpc.io/docs/server/adaptersexport defaulttrpcNext .createNextApiHandler ({router :appRouter ,createContext : () => ({}),});
Backenden ovan använder den rekommenderade filstrukturen, men du kan hålla det enkelt och lägga allt direkt i en API-hanterare om du föredrar det.
4. Skapa tRPC-hooks
Använd funktionen createTRPCNext för att skapa en uppsättning starkt typade hooks från din API:s typsignatur.
utils/trpc.tstsximport {httpBatchLink } from '@trpc/client';import {createTRPCNext } from '@trpc/next';import type {AppRouter } from '../server/routers/_app';functiongetBaseUrl () {if (typeofwindow !== 'undefined')// browser should use relative pathreturn '';if (process .env .VERCEL_URL )// reference for vercel.comreturn `https://${process .env .VERCEL_URL }`;if (process .env .RENDER_INTERNAL_HOSTNAME )// reference for render.comreturn `http://${process .env .RENDER_INTERNAL_HOSTNAME }:${process .env .PORT }`;// assume localhostreturn `http://localhost:${process .env .PORT ?? 3000}`;}export consttrpc =createTRPCNext <AppRouter >({config (config ) {return {links : [httpBatchLink ({/*** If you want to use SSR, you need to use the server's full URL* @see https://trpc.io/docs/client/nextjs/pages-router/ssr**/url : `${getBaseUrl ()}/api/trpc`,// You can pass any HTTP headers you wish hereasyncheaders () {return {// authorization: getAuthCookie(),};},}),],};},/*** @see https://trpc.io/docs/client/nextjs/pages-router/ssr**/ssr : false,});
utils/trpc.tstsximport {httpBatchLink } from '@trpc/client';import {createTRPCNext } from '@trpc/next';import type {AppRouter } from '../server/routers/_app';functiongetBaseUrl () {if (typeofwindow !== 'undefined')// browser should use relative pathreturn '';if (process .env .VERCEL_URL )// reference for vercel.comreturn `https://${process .env .VERCEL_URL }`;if (process .env .RENDER_INTERNAL_HOSTNAME )// reference for render.comreturn `http://${process .env .RENDER_INTERNAL_HOSTNAME }:${process .env .PORT }`;// assume localhostreturn `http://localhost:${process .env .PORT ?? 3000}`;}export consttrpc =createTRPCNext <AppRouter >({config (config ) {return {links : [httpBatchLink ({/*** If you want to use SSR, you need to use the server's full URL* @see https://trpc.io/docs/client/nextjs/pages-router/ssr**/url : `${getBaseUrl ()}/api/trpc`,// You can pass any HTTP headers you wish hereasyncheaders () {return {// authorization: getAuthCookie(),};},}),],};},/*** @see https://trpc.io/docs/client/nextjs/pages-router/ssr**/ssr : false,});
createTRPCNext fungerar inte med tRPC-v9:s interopläge. Om du migrerar från v9 med interop bör du fortsätta använda det gamla sättet att initiera tRPC.
5. Konfigurera _app.tsx
Omsluts din rotapp-sida i trpc.withTRPC HOC, ungefär så här:
pages/_app.tsxtsximport type {AppType } from 'next/app';import {trpc } from '../utils/trpc';constMyApp :AppType = ({Component ,pageProps }) => {return <Component {...pageProps } />;};export defaulttrpc .withTRPC (MyApp );
pages/_app.tsxtsximport type {AppType } from 'next/app';import {trpc } from '../utils/trpc';constMyApp :AppType = ({Component ,pageProps }) => {return <Component {...pageProps } />;};export defaulttrpc .withTRPC (MyApp );
6. Gör en API-förfrågan
Klart!
Du kan nu använda React-hooksen du precis skapat för att anropa ditt API. För mer detaljer, se React Query-integrationen.
pages/index.tsxtsximport {trpc } from '../utils/trpc';export default functionIndexPage () {consthello =trpc .hello .useQuery ({text : 'client' });if (!hello .data ) {return <div >Loading...</div >;}return (<div ><p >{hello .data .greeting }</p ></div >);}
pages/index.tsxtsximport {trpc } from '../utils/trpc';export default functionIndexPage () {consthello =trpc .hello .useQuery ({text : 'client' });if (!hello .data ) {return <div >Loading...</div >;}return (<div ><p >{hello .data .greeting }</p ></div >);}
Alternativ för createTRPCNext()
config-funktionen
Argumentet config är en funktion som returnerar ett objekt som konfigurerar tRPC- och React Query-klienterna. Denna funktion tar emot ett objekt med en valfri egenskap ctx (av typen NextPageContext) som ger dig tillgång till Next.js req-objektet under server-side rendering. Det returnerade värdet kan innehålla följande egenskaper:
-
Obligatoriskt:
-
linksför att anpassa dataflödet mellan tRPC-klient och tRPC-server. Läs mer. -
Valfritt:
-
queryClientConfig: ett konfigurationsobjekt för React Query'sQueryClientsom används internt av tRPC React-hooks: QueryClient docs -
queryClient: en React Query QueryClient-instans- Obs: Du kan bara ange antingen
queryClientellerqueryClientConfig.
- Obs: Du kan bara ange antingen
-
transformer: en transformer som appliceras på utgående payloads. Läs mer om Data Transformers -
abortOnUnmount: avgör om pågående förfrågningar ska avbrytas när komponenten avmonteras. Standardvärdet ärfalse.
overrides: (standard: undefined)
Konfigurera överskrivningar för React Query's hooks.
ssr-boolean (standard: false)
Anger om tRPC ska avvakta queries vid server-side rendering av en sida. Standard är false.
responseMeta-funktionen
Möjlighet att sätta request headers och HTTP-status vid server-side rendering.
Exempel
utils/trpc.tstsximport {createTRPCNext } from '@trpc/next';import type {AppRouter } from '../server/routers/_app';export consttrpc =createTRPCNext <AppRouter >({config (config ) {return {links : [/* [...] */],};},});
utils/trpc.tstsximport {createTRPCNext } from '@trpc/next';import type {AppRouter } from '../server/routers/_app';export consttrpc =createTRPCNext <AppRouter >({config (config ) {return {links : [/* [...] */],};},});
Nästa steg
Bläddra igenom resten av dokumentationen för att lära dig mer om ämnen som auktorisering, middlewares och felhantering.
Du kan också hitta information om queries och mutations nu när du använder @trpc/react-query.