Tube - tRPC setup

tRPC的基本概念
  • 一个用于构建全栈类型安全API的框架(端到端类型安全),让前端可以像调用本地函数一样调用后端api
  • 可替代传统的api路由,前后端共用一份类型定义
  • tRPC中有一个prefetch的概念,是提前获取(预取)数据的机制
  • tRPC 和 React Query 的 prefetchQuery 是一个概念,本质上就是封装了 React Query
  • prefetch的数据存储在React Query缓存中(Query Cache)
  • 前端使用数据时,React Query会先差看缓存中是否有对应的数据,如果有则返回,没有就再去请求
  • React Query 缓存是内存级别的,页面刷新后就会清除,非持久化缓存
  • trpc/server 端负责后端api路由的创建、管理等,trpc/client 端负责在前端的部分像调用函数一样调用后端api
kotlin 复制代码
Server Component        
  prefetch(data、authenticated data)
↓
Data Cache
  preserve data
↓
HydrateClient 包裹 Client Component
  将服务端数据传递至客户端,避免客户端2次请求
将tRPC添加到现有项目
1. Install
  • bun add @trpc/server @trpc/client @trpc/react-query @tanstack/react-query@latest zod client-only server-only
  • 版本信息
perl 复制代码
"@tanstack/react-query": "^5.84.2",
"@trpc/client": "^11.4.4",
"@trpc/react-query": "^11.4.4",
"@trpc/server": "^11.4.4",
"zod": "^4.0.16",
"client-only": "^0.0.1",
"server-only": "^0.0.1",
2. Create a tRPC router
  • src/trpc/init.ts,使用 initTRPC()初始化 tRPC 后端
  • src/trpc/routers/_app.ts, 用于放置tRPC总路由(将所有小路由集合起来并导出)
  • src/app/api/trpc/[trpc]/route.ts,把HTTP请求(GET/POST)转交给 tRPC 的后端路由解析器,可以理解为 tRPC 的网关/适配器
3. Create a Query Client factory src/trpc/query-client.ts
  • tRPC 的前端调用是基于@tanstack/react-query的(它负责缓存、请求状态管理、重试等)
  • QueryClient 就是 React Query 的 "全局数据管理器"
  • 在next.js中,需要支持 数据的 "脱水(dehydrate)" 和 "水化(hydrate)"
    • 脱水(dehydrate):序列化服务器端请求到的数据 → 注入到HTML里发给浏览器
    • 水化(hydrate):浏览器接收数据后反序列化 → 恢复到 QueryClient 的缓存中
4. Create a tRPC client for Client Components src/trpc/client.tsx
  • 这一步记得在 src/app/layout.tsx 挂载 TRPCProvider
javascript 复制代码
...
import { TRPCProvider } from "@/trpc/clent";
...
export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <ClerkProvider afterSignOutUrl='/'>
      <html lang="en">
        <body className={ inter.className }>
          <TRPCProvider>
            {children}
          </TRPCProvider>
        </body>
      </html>
    </ClerkProvider>
  );
}
5. Create a tRPC caller for Server Components src/trpc/server.tsx
  • import 'server-only' 表示这个文件只能在服务端被调用
6. Using your API
  • 使用 <ErrorBoundary> 处理错误状态,当前安装版本"react-error-boundary": "^6.0.0"
  • 使用 <Suspense> 处理loading状态
相关推荐
祖国的好青年13 小时前
VS Code 搭建 React Native 开发环境(Windows 实战指南)
android·windows·react native·react.js
一个扣子13 小时前
性能面板解读:通过 Hermes Runtime 测量函数执行耗时
react native·chrome devtools·hermes·性能面板·函数耗时·performance api
前端双越老师2 天前
3 个命令 7 个步骤,学会 git worktree 并行开发
git·ai编程·全栈
hamber2 天前
用 Flutter 造一台掌机
flutter·ai编程·全栈
一个扣子2 天前
Hermes 的 Android 与 iOS 平台差异化配置详解
react native·字节码·新架构·hermes·android配置·ios配置·平台差异
茅盾体3 天前
React Native
android·react native·react.js
peterfei3 天前
一夜重构!我用 18000 行代码打造了完全自研的 AI TUI 终端
人工智能·开源·全栈
小兵张健3 天前
30天减20斤挑战:少一斤发100红包(2)
后端·程序员·全栈
一个扣子3 天前
多环境配置:开发/生产环境下 Hermes 的开启与关闭策略
react native·开发模式·多环境配置·生产模式·hermes·环境切换·构建配置
TechMasterPlus5 天前
Hermes 深度解析:React Native 高性能 JavaScript 引擎实践指南
javascript·react native·react.js