Next.js App Router, GraphQL Codegen & TanStack Query
在調用 GraphQL 時,過去的主要選擇通常是使用 Apollo,但自從 React Query 開始支援 GraphQL API 後,我們有了另一個強大的選擇。
- React Query 是一個專門用來管理 API 請求狀態的套件,它可以輕鬆處理快取、重試等功能
- GraphQL Codegen 是一個能夠自動生成型別的工具,確保前後端型別一致,提升開發效率
Install
- package.json
Setting
codegen
- 此設定檔包含兩個路由
- 並且自訂 fetcher, 來應對需要身份驗證的情境
Providers
- 設定 Providers
fetcher
- 此檔案自訂 Authorization Headers, 並透過 options 傳值來動態調整
產生方法
First Step: Create Graphql
- 找到需要使用的 Query, 並且在 codegen 設定的路徑位置建立檔案, 以上方為例, first-endpoint 為 documents: ‘./graphql/first-endpoint/*.graphql’,
Second Step: 指令產生型別及方法
- pnpm codegen
接著會看到類似的指令顯示則為成功
可以至 codegen 設定位置確認檔案產生
Third Step: 組件使用
以上方為例 query 命名為 FirstExample, 則 /graphql/first-endpoint/first-endpoint.ts 會自動產生 method 名為 useFirstExampleQuery, 若為 Mutation 則為 useFitstExampleMutaion
Client Component
Query
Mutation
fetcher - query
- 當要在 call api 前傳值判斷的話, 則可以使用剛剛設定的 fetcher
當 call api 時, {test: “123421421”} 會當作 options 傳進 fetcher
fetcher - mutation
- 比起 query, mutation 使用到的場景更多
Server Component
Query
server component 沒有 useQuery 使用, 需引入 QueryClient, 再掛上我們剛產好的 useQuery 來 call api
而型別也一起產好了, 可以接在 fetchQuery 上
最後需在組件最外層使用 HydrationBoundary 、 dehydrate 來傳入 query data
Mutation
fetcher - query
fetcher - mutation
Reference
TanStack Query - SSR & Next.js App Router