getStaticPaths
如果頁面具有動態路由 (Dynamic Routes) 並使用 getStaticProps
,則需要定義要靜態生成的路徑列表。
當你從使用動態路由的頁面導出名為 getStaticPaths
的函式 (靜態網站生成) 時,Next.js 將會靜態預渲染所有由 getStaticPaths
指定的路徑。
getStaticPaths
API 參考文件 涵蓋了所有可與 getStaticPaths
一起使用的參數和屬性。
何時應該使用 getStaticPaths?
如果你要靜態預渲染使用動態路由的頁面,並且符合以下情況,則應該使用 getStaticPaths
:
- 資料來自無頭 CMS (headless CMS)
- 資料來自資料庫
- 資料來自檔案系統
- 資料可以公開快取 (非用戶特定)
- 頁面必須預渲染 (為了 SEO) 且速度要非常快 —
getStaticProps
會生成HTML
和JSON
檔案,兩者都可以透過 CDN 快取以提升效能
getStaticPaths 何時執行
getStaticPaths
僅會在生產環境的建置階段執行,不會在運行時呼叫。你可以使用此工具 驗證 getStaticPaths
內的程式碼已從客戶端套件中移除。
getStaticProps 如何與 getStaticPaths 搭配執行
getStaticProps
會在next build
期間針對建置時返回的任何paths
執行- 使用
fallback: true
時,getStaticProps
會在背景執行 - 使用
fallback: blocking
時,getStaticProps
會在初始渲染前呼叫
可以在哪裡使用 getStaticPaths
getStaticPaths
必須 與getStaticProps
一起使用- 不能 將
getStaticPaths
與getServerSideProps
一起使用 - 可以從同時使用
getStaticProps
的動態路由 (Dynamic Route) 導出getStaticPaths
- 不能 從非頁面檔案 (例如
components
資料夾) 導出getStaticPaths
- 必須將
getStaticPaths
作為獨立函式導出,而非頁面元件的屬性
開發環境中每次請求都會執行
在開發環境 (next dev
) 中,getStaticPaths
會在每次請求時呼叫。
按需生成路徑
getStaticPaths
允許你控制在建置期間生成哪些頁面,而不是透過 fallback
按需生成。在建置期間生成更多頁面會導致建置速度變慢。
你可以透過返回空陣列作為 paths
來延遲按需生成所有頁面。這在將 Next.js 應用程式部署到多個環境時特別有用。例如,你可以透過為預覽環境 (而非正式環境建置) 按需生成所有頁面來加快建置速度。這對於擁有數百/數千個靜態頁面的網站非常有用。