Nest.js: getStaticPaths vs useRouter
前言
在學習生成動態頁面(dynamic routes)時
看到了兩種方法: getStaticPaths
和useRouter
來整理一下他們之間的差異
在 server side 生成動態頁面 getStaticPaths
getStaticPaths 和 getStaticProps 一樣
是只會跑在 build time 的函式
假如我們的頁面數量是根據某個資料決定的
那是不是我們只要在 build time 之前
手中握有那份資料,然後告訴 Next 怎麼依照資料產生頁面
這樣就不用手刻好幾十個頁面檔案
這時就要用到getStaticPaths
1 | // in '/pages/[id].js' |
1 | // in 'pages/[id].js' |
以上動作會在 build time 的時候進行一次
在 client side 產生動態資料 useRouter
另一種情境是
可能我們的網站有連接資料庫,而那個資料庫時常更新
每當資料庫多出現一個 record 時(例如新增一篇貼文)
前端可能也需要多一個頁面來呈現它
但如果因此就需要重新 build 一次的話就太麻煩了
這時就可以用useRouter
來達到動態頁面
簡單來說,頁面都是同一個
只是會根據 URL 來取得動態資料
1 | // in '/pages/[id].js' |
以上動作會在 client side 的每次 request time 運行一次
結語
getStaticPaths
是在 build time 根據你定義的方法動態生成頁面
useRouter
是在 request time 根據瀏覽器的 URL 動態生成參數