在 React 和 Next.js 中配置 tRPC
在 Next.js App Router 项目中配置 tRPC 路由器、过程和 React 客户端适配器
在 React 和 Next.js 中配置 tRPC 是 CoddyKit 上的免费 React Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。
安装 tRPC 依赖
安装 @trpc/server 和 @trpc/client 这两个 tRPC 核心软件包。添加 @trpc/react-query 作为 React 钩子适配器,并添加 @tanstack/react-query 作为为这些钩子提供支持的对等依赖。
对于 Next.js API 路由集成,较新版本的 tRPC 不需要额外的适配器软件包。
在服务器端初始化 tRPC
创建 server/trpc.ts 文件,并调用 initTRPC.create() 获取 t 对象。将 t.router 导出为 router,将 t.procedure 导出为 publicProcedure,并将 t.mergeRouters 导出为实用工具。
initTRPC 工厂接受一个上下文类型泛型,用于定义每个过程的 ctx 参数中可用的数据。
定义您的第一个过程
您可以将 .input(zodSchema).query(handler) 或 .mutation(handler) 链接到 publicProcedure 上来定义过程。例如,对于一个简单的问候端点:publicProcedure.input(z.object({ name: z.string() })).query(({ input }) => "Hello " + input.name)。
Zod 模式同时为输入提供 TypeScript 类型和运行时验证。
构建应用路由
使用 router() 函数创建 appRouter:router({ hello: helloHandler, users: usersRouter })。嵌套路由器可以让您将过程按领域(用户、文章、评论)组织到不同文件中。
导出 AppRouter 类型:export type AppRouter = typeof appRouter。客户端将导入的就是这个类型。
Next.js API 路由处理程序
创建 app/api/trpc/[trpc]/route.ts(应用路由)或 pages/api/trpc/[trpc].ts(页面路由)。使用 @trpc/server/adapters/fetch 中的 fetchRequestHandler,通过这个单一的全匹配路由处理所有 tRPC 请求。
将路由器、createContext 函数以及请求和响应对象传递给 fetchRequestHandler。
为 React 创建 tRPC 客户端
创建 utils/trpc.ts 文件。调用 createTRPCReact<AppRouter>() 来创建具有类型的 trpc 客户端对象。该对象中的每个属性都对应路由器中的一个过程,并分别提供 React 查询钩子。
AppRouter 类型从您的服务器文件导入;TypeScript 会沿着导入链验证所有使用方式。
QueryClient 和 TRPCProvider 设置
在应用布局或 _app.tsx 中,创建一个 QueryClient 实例,并使用 trpc.createClient({ links: [httpBatchLink({ url: '/api/trpc' })] }) 创建一个 tRPC 客户端实例。
使用 trpc.Provider(传入 tRPC 客户端)和 QueryClientProvider 将组件树包裹起来。两个提供程序缺一不可。
进行您的第一个 tRPC 查询
在任意组件中:const { data, isLoading, error } = trpc.hello.useQuery({ name: 'World' })。这个钩子具有完整类型:data 是从 hello 过程推断出的返回类型,而输入对象会根据 Zod 模式进行类型检查。
传入错误的输入类型会导致 TypeScript 编译错误,而不是运行时错误。
TypeScript 项目引用
要使 tRPC 正常工作,客户端必须能够从服务器文件导入类型。在 Next.js 项目中,服务器代码和客户端代码使用同一个 TypeScript 编译过程,因此导入可以直接生效。
在包含独立软件包的单仓库中,请在 tsconfig.json 中配置 TypeScript 项目引用或路径别名,使其指向服务器软件包。
环境差异
tRPC 处理程序在服务器上运行(作为 Next.js API 路由或边缘函数)。tRPC 客户端在浏览器中运行。TypeScript 会在构建时处理类型级导入,而不会在浏览器中执行服务器代码。
客户端只会导入 AppRouter 类型,而不会导入实际实现,因此不会有服务器机密泄露到客户端软件包中。
测试设置
启动 Next.js 开发服务器并打开浏览器控制台。trpc.hello.useQuery 调用应记录服务器响应。检查网络选项卡,查看发送到 /api/trpc/hello 的 HTTP 请求,以及作为查询参数批量传入的输入。
默认的 httpBatchLink 会将多个并发请求合并为一个 HTTP 调用,您可以在网络瀑布图中看到这一点。
tRPC 服务器路由设置
哪个函数会初始化 tRPC 实例,并提供路由器和过程工厂?
课程回顾
安装 @trpc/server、@trpc/client、@trpc/react-query 和 @tanstack/react-query。使用 initTRPC.create() 初始化 tRPC,定义过程,并导出 AppRouter 类型。创建 Next.js API 全匹配路由,设置 TRPCProvider 和 QueryClientProvider,然后使用 trpc.procedureName.useQuery() 调用过程。
TypeScript 会在编译时强制检查完整的客户端—服务器契约,无需代码生成。
常见问题解答
「在 React 和 Next.js 中配置 tRPC」课时是免费的吗?
是的 — 「在 React 和 Next.js 中配置 tRPC」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。
「在 React 和 Next.js 中配置 tRPC」这节课中我会学到什么?
在 Next.js App Router 项目中配置 tRPC 路由器、过程和 React 客户端适配器 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 React Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「在 React 和 Next.js 中配置 tRPC」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 React Academy 课中编写并运行代码吗?
能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- tRPC 解决的问题
- 在 React 和 Next.js 中配置 tRPC
- 查询、变更与订阅
- 将 tRPC 与 React Query 和身份验证集成