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

從 v10 遷移到 v11

資訊

這是目前正在進行中的工作,代表版本 11

  • 此功能穩定,可用於製作環境,但在我們達到 11.0.0 之前,我們可能會在補丁版本之間進行一些小的破壞性 API 變更
  • 這些套件已使用 next 標籤發佈在 npm 上

安裝 / 升級

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-adapters 的重大變更,但對你這個使用者來說不應該有影響。

如果你正在建構一個 adapter,請在 程式碼中查看我們的 adapter 如何運作,不要猶豫在我們的 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 不支援的媒體類型 錯誤。

我們的 tRPC 用戶端已經傳送內容類型標頭,因此只有在您手動呼叫 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://react.dev.org.tw/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。此模式從未打算長期支援,我們現在已將其移除。