從 v10 遷移到 v11
這是目前正在進行中的工作,代表版本 11。
- 此功能穩定,可用於製作環境,但在我們達到
11.0.0
之前,我們可能會在補丁版本之間進行一些小的破壞性 API 變更 - 這些套件已使用
next
標籤發佈在 npm 上
安裝 / 升級
- 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-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_in
或 Procedure._def._input_in
。
明確的 Content-Type 檢查(非重大變更)
我們現在對執行 POST 要求時,明確檢查 Content-Type
標頭。這表示如果您傳送的 Content-Type
要求與預期的不符,您將會收到 415 不支援的媒體類型
錯誤。
我們的 tRPC 用戶端已經傳送內容類型標頭,因此只有在您手動呼叫 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://react.dev.org.tw/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。此模式從未打算長期支援,我們現在已將其移除。