請求時獲取資料
如果您需要在請求時而非建置時獲取資料,可以嘗試使用伺服器渲染 (Server-side Rendering):
要使用伺服器渲染 (Server-side Rendering),您需要從頁面中匯出 getServerSideProps
而非 getStaticProps
。
使用 getServerSideProps
以下是 getServerSideProps
的起始程式碼。由於我們的部落格範例不需要此功能,因此不會實作它。
由於 getServerSideProps
會在請求時被呼叫,其參數 (context
) 包含請求特定的參數。
您應該僅在需要預渲染必須在請求時獲取資料的頁面時使用 getServerSideProps
。相較於 getStaticProps
,首次位元組時間 (TTFB) 會較慢,因為伺服器必須在每次請求時計算結果,且結果無法在未經額外配置的情況下由 CDN 快取。
客戶端渲染 (Client-side Rendering)
如果您不需要預渲染資料,也可以使用以下策略(稱為客戶端渲染 (Client-side Rendering)):
- 靜態生成(預渲染)不需要外部資料的頁面部分。
- 當頁面載入時,從客戶端使用 JavaScript 獲取外部資料並填充剩餘部分。
這種方法非常適合使用者儀表板頁面。由於儀表板是私密的、使用者特定的頁面,SEO 無關緊要,且頁面不需要預渲染。資料會頻繁更新,因此需要請求時資料獲取。
SWR
Next.js 團隊開發了一個用於資料獲取的 React Hook,稱為 SWR。如果您需要在客戶端獲取資料,我們強烈推薦使用它。它處理快取、重新驗證、焦點追蹤、定時重新獲取等功能。這裡不會詳述細節,但以下是一個使用範例:
請查閱 SWR 文件以了解更多。
總結
在下一課中,我們將使用動態路由 (dynamic routes) 為每篇部落格文章建立頁面。
再次提醒,您可以在資料獲取文件中深入了解
getStaticProps
和getServerSideProps
。