You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Remix、Zod和Prisma搭建tRPC环境?

在Remix中搭建tRPC的分步指南

1. 安装核心依赖

首先安装tRPC相关包及依赖工具:

npm install @trpc/server @trpc/client @trpc/react-query @tanstack/react-query zod
# 或使用yarn
yarn add @trpc/server @trpc/client @trpc/react-query @tanstack/react-query zod

2. 创建tRPC服务端路由

在app/trpc/server.ts中定义你的tRPC服务逻辑:

import { initTRPC } from '@trpc/server';
import { z } from 'zod';

// 初始化tRPC实例
const t = initTRPC.create();

// 定义API路由
export const router = t.router({
  // 示例:接收name参数并返回问候语
  hello: t.procedure
    .input(z.object({ name: z.string() }))
    .query(({ input }) => {
      return {
        message: `Hello, ${input.name}!`
      };
    }),
  // 可添加更多业务路由
});

// 导出路由类型供客户端使用
export type Router = typeof router;

3. 配置Remix API路由处理tRPC请求

在app/routes/api/trpc/$.ts创建动态路由,处理所有tRPC请求:

import { fetchRequestHandler } from '@trpc/server/adapters/fetch';
import { router } from '~/trpc/server';

// 复用loader处理GET/POST请求
export const loader = async ({ request }) => {
  return fetchRequestHandler({
    endpoint: '/api/trpc',
    req: request,
    router,
    // 若需要上下文可在这里定义,比如获取用户会话
    createContext: async () => ({}),
  });
};

export const action = loader;

4. 创建tRPC客户端实例

在app/trpc/client.ts中初始化客户端:

import { createTRPCReact } from '@trpc/react-query';
import type { Router } from './server';

// 创建类型安全的tRPC客户端
export const trpc = createTRPCReact<Router>();

5. 在根组件中配置tRPC Provider

修改app/root.tsx,注入tRPC和React Query的Provider:

import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { trpc } from '~/trpc/client';
import { httpBatchLink } from '@trpc/client';
import { useState } from 'react';
import { Outlet, Scripts } from '@remix-run/react';

export default function App() {
  const [queryClient] = useState(() => new QueryClient());
  const [trpcClient] = useState(() =>
    trpc.createClient({
      links: [
        httpBatchLink({
          url: '/api/trpc',
        }),
      ],
    })
  );

  return (
    <html lang="en">
      <head>
        <meta charSet="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <title>Remix + tRPC</title>
      </head>
      <body>
        <trpc.Provider client={trpcClient} queryClient={queryClient}>
          <QueryClientProvider client={queryClient}>
            <Outlet />
          </QueryClientProvider>
        </trpc.Provider>
        <Scripts />
      </body>
    </html>
  );
}

6. 在业务路由中调用tRPC API

以app/routes/_index.tsx为例,使用tRPC请求数据:

import { trpc } from '~/trpc/client';

export default function Index() {
  const helloQuery = trpc.hello.useQuery({ name: 'Remix User' });

  if (helloQuery.isLoading) return <div>Loading...</div>;
  if (helloQuery.isError) return <div>Error: {helloQuery.error.message}</div>;

  return <h1>{helloQuery.data.message}</h1>;
}

内容的提问来源于stack exchange,提问作者Mayank Pathela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:23:23