从 v10 迁移到 v11
这是一个正在进行中的工作,代表**版本 11**。
- 该功能**稳定且可用于生产环境**,但在我们达到
11.0.0
之前,我们可能会在补丁之间进行小的破坏性 API 更改。 - 这些包在 npm 上发布了
next
标签。
安装/升级
- npm
- yarn
- pnpm
- bun
npm install @trpc/server@next @trpc/client@next @trpc/react-query@next @trpc/next@next @tanstack/react-query@latest @tanstack/react-query-devtools@latest
yarn add @trpc/server@next @trpc/client@next @trpc/react-query@next @trpc/next@next @tanstack/react-query@latest @tanstack/react-query-devtools@latest
pnpm add @trpc/server@next @trpc/client@next @trpc/react-query@next @trpc/next@next @tanstack/react-query@latest @tanstack/react-query-devtools@latest
bun add @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_in
或Procedure._def._input_in
。
显式 Content-Type 检查(非破坏性)
我们现在对执行 POST 请求时的Content-Type
标头进行了显式检查。这意味着如果你发送一个Content-Type
与预期不符的请求,你将收到一个415 Unsupported Media Type
错误。
我们的 tRPC 客户端已经发送了 content-type 标头,所以只有在你手动调用 tRPC 时才有可能出现破坏性更改。
添加了对方法覆盖的支持(很少破坏)
允许你覆盖过程的 HTTP 方法,使其始终以POST
方式发送,以解决例如最大 URL 长度的一些限制。
关闭#3910
添加了对双向无限查询的支持(非破坏性)
添加了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-routernested1: {proc: publicProcedure.query(() => '...'),},// Equivalent of:nested2: router({proc: publicProcedure.query(() => '...'),}),});
ts
const appRouter = router({// Shorthand plain object for creating a sub-routernested1: {proc: publicProcedure.query(() => '...'),},// Equivalent of:nested2: router({proc: publicProcedure.query(() => '...'),}),});
删除了inferHandlerInput<T>
和ProcedureArgs<T>
(对大多数来说是非破坏性的)
如果这些类型对你或你的代码库没有任何意义,请忽略它。
改用inferProcedureInput<TProcedure>
,并改用TRPCProcedureOptions
。
添加了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,尽管这些在浏览器中已经支持了很多年。
wsLink
改进(次要)
- 如果服务器在部署期间切换位置,则可以在
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
已重命名为createTRPCClient
。createTRPCProxyClient
现在被标记为已弃用。
SSG 帮助程序(很少破坏)
createSSGHelpers
是 v9 版本的,现在已移除。v10 版本的等效函数createProxySSGHelpers
已重命名为createSSGHelpers
。createProxySSGHelpers
现在已弃用,但为了向后兼容,它被别名为createSSGHelpers
。- 已移除导出类型
CreateSSGHelpersOptions
。
interop
模式已移除(很少会造成破坏)
我们已从 tRPC 中移除 interop
模式。此模式允许您从 v9 平滑过渡到 v10。此模式从未打算长期支持,我们现在已将其移除。