跳至主要内容
版本:11.x

从 v10 迁移到 v11

info

这是一个正在进行中的工作,代表**版本 11**。

  • 该功能**稳定且可用于生产环境**,但在我们达到11.0.0之前,我们可能会在补丁之间进行小的破坏性 API 更改。
  • 这些包在 npm 上发布了next标签。

安装/升级

npm install @trpc/server@next @trpc/client@next @trpc/react-query@next @trpc/next@next @tanstack/react-query@latest @tanstack/react-query-devtools@latest

反向时间顺序的变更日志

这是一个草稿文档。随着我们接近 v11 版本,它将更新为一个完整的指南。唯一需要你做的大事是更新 TanStack Query 到 v5.0.0。

resolveHTTPRequest已被resolveRequest取代,后者使用 Fetch API(很少破坏)

函数resolveHTTPRequest已被resolveRequest取代,后者使用 Fetch API - Request/Response

这对 HTTP 适配器来说是一个破坏性更改,但不会影响你作为用户。

如果你正在构建适配器,请查看我们的适配器是如何工作的代码,并且不要犹豫在我们的Discord中寻求帮助。

TRPCRequestInfo已更新(很少破坏)

输入现在在需要时被惰性地实例化,这意味着当 tRPC 调用createContext时,输入和过程类型不再可用。

你仍然可以通过调用info.calls[index].getRawInput()来访问输入。

所有实验性的表单数据支持已被替换(很少破坏)

这只会影响你是否使用了实验性的表单数据功能。

  • experimental_formDataLink - 使用 httpLink
  • experimental_parseMultipartFormData - 不再需要
  • experimental_isMultipartFormDataRequest - 不再需要
  • experimental_composeUploadHandlers - 不再需要
  • experimental_createMemoryUploadHandler - 不再需要
  • experimental_NodeOnDiskFile 和 experimental_createFileUploadHandler - 在此第一个版本中不支持,如果你需要在磁盘上保存数据,请打开一个问题
  • experimental_contentTypeHandlers - 不再需要,但如果社区需要新的数据类型,可能会回来

你可以在examples/next-formdata中看到新方法

Procedure._def._output_in / Procedure._def._input_in移动到Procedure._def.$types(非破坏性)

这对 tRPC 内部来说是一个破坏性更改,但不会影响你作为用户。

你无需做任何事情,除非你直接在代码中使用Procedure._def._output_inProcedure._def._input_in

显式 Content-Type 检查(非破坏性)

我们现在对执行 POST 请求时的Content-Type标头进行了显式检查。这意味着如果你发送一个Content-Type与预期不符的请求,你将收到一个415 Unsupported Media Type错误。

我们的 tRPC 客户端已经发送了 content-type 标头,所以只有在你手动调用 tRPC 时才有可能出现破坏性更改。

添加了对方法覆盖的支持(很少破坏)

允许你覆盖过程的 HTTP 方法,使其始终以POST方式发送,以解决例如最大 URL 长度的一些限制。

关闭#3910

添加了对双向无限查询的支持(非破坏性)

参见useInfiniteQuery()

添加了inferProcedureBuilderResolverOptions<T>帮助程序(非破坏性)

添加了一个帮助程序来推断过程构建器解析器的选项。如果你想为不同的过程创建可重用的函数,这很有用。

参见测试这里,了解如何使用它。

TypeScript 将指导你完成此迁移。

仅适用于使用数据转换器的情况。

你现在在links数组中设置数据转换器,而不是在初始化 tRPC 客户端时设置。

在任何你使用 HTTP 链接的地方,如果你使用转换器,都必须添加transformer: superjson

ts
httpBatchLink({
url: '/api/trpc',
transformer: superjson, // <-- add this
});
ts
httpBatchLink({
url: '/api/trpc',
transformer: superjson, // <-- add this
});
ts
createTRPCNext<AppRouter>({
// [..]
transformer: superjson, // <-- add this
});
ts
createTRPCNext<AppRouter>({
// [..]
transformer: superjson, // <-- add this
});

@trpc/next ssr 模式现在需要一个带有ssr: true的预处理帮助程序(很少破坏)

这是为了修复https://github.com/trpc/trpc/issues/5378,其中react-dom被导入,无论你是否使用此功能。

参见SSR 文档

添加了对简短路由定义的支持(非破坏性)

参见合并路由器

ts
const appRouter = router({
// Shorthand plain object for creating a sub-router
nested1: {
proc: publicProcedure.query(() => '...'),
},
// Equivalent of:
nested2: router({
proc: publicProcedure.query(() => '...'),
}),
});
ts
const appRouter = router({
// Shorthand plain object for creating a sub-router
nested1: {
proc: publicProcedure.query(() => '...'),
},
// Equivalent of:
nested2: router({
proc: publicProcedure.query(() => '...'),
}),
});

删除了inferHandlerInput<T>ProcedureArgs<T>(对大多数来说是非破坏性的)

如果这些类型对你或你的代码库没有任何意义,请忽略它。

改用inferProcedureInput<TProcedure>,并改用TRPCProcedureOptions

添加了useSuspenseQueries()

参见useSuspenseQueries

https://github.com/trpc/trpc/pull/5226

重构内部泛型(很少破坏)

我们已经重构了我们的内部泛型,并使它们更易读(待办事项:链接过程构建器酱汁)

React 现在是 >=18.2.0(很少破坏)

查看他们的迁移指南:https://reactjs.ac.cn/blog/2022/03/08/react-18-upgrade-guide

现在需要 NodeJS 18+ 和现代浏览器(很少破坏)

我们添加了 FormData、File、Blob 和 ReadableStream 的使用。现在需要 NodeJS 18,尽管这些在浏览器中已经支持了很多年。

  • 如果服务器在部署期间切换位置,则可以在url回调中传递一个Promise
  • 添加了新的lazy选项,当没有待处理的请求时,该选项会自动断开 websocket 连接。

中间件中的rawInput现在是getRawInput(很少破坏)

虽然我们目前还没有在内部做任何不同的事情(只是还没有),但这有助于支持 tRPC 中一个非常需要的功能:除了 JSON 之外的其他内容类型。

简化的类型和.d.ts输出

路由器中的过程现在只发出它们的输入和输出 - 之前它们还会为每个过程包含完整的上下文对象,这会导致例如.d.ts中的不必要的复杂性。

React Query peerDep 现在是 v5(破坏性)

查看他们的迁移指南:https://tanstack.com/query/v5/docs/framework/react/guides/migrating-to-v5

导出名称AbcProxyXyz已重命名为AbcXyz(非破坏性)

代理名称是由于 v9 使用了AbcXyz名称,这些名称已被删除,代理名称已重命名为非代理名称,例如

  • createTRPCClient从 v9 开始已弃用,现在已完全删除。createTRPCProxyClient已重命名为createTRPCClientcreateTRPCProxyClient现在被标记为已弃用。

SSG 帮助程序(很少破坏)

  • createSSGHelpers 是 v9 版本的,现在已移除。v10 版本的等效函数 createProxySSGHelpers 已重命名为 createSSGHelpers
  • createProxySSGHelpers 现在已弃用,但为了向后兼容,它被别名为 createSSGHelpers
  • 已移除导出类型 CreateSSGHelpersOptions

interop 模式已移除(很少会造成破坏)

我们已从 tRPC 中移除 interop 模式。此模式允许您从 v9 平滑过渡到 v10。此模式从未打算长期支持,我们现在已将其移除。