next.js demo
Intro
- Next.js 是一個基於 React 的框架,它同時支援 SSR (Server Side Rendering) 與 SSG (Static Side Generation) 兩種方法,不需要很多的設定就可以讓網站同時有這兩種功能。
Steps
npx create-next-app@latest
- What is your project named? › my-app
- 直接執行
npm run dev
就可以在 localhost:3000 啟動 Next.js 專案
npm run start
是給 Production 發佈用, 執行前先跑 npm run build
- add static router in page
- router
- default router
- 在page建 about.js檔
- 在page建一個資料夾 profile, 裡面建index.js當作default檔案, default /profile 就是index.js
- 在page建 404.js檔當作錯誤404 page
- add dynamic router: [username].js
- 在資料夾 profile 裡面建[username].js檔案, 實作動態路由, 當路徑為profile/emma指的就是[username].js檔案
- layout使用:建立components file資料夾在root, 裡面建
- Navbar.js
- Footer.js
- Layout.js (將Navbar, Footer放進Layout)
- 建utils file, 裡面建api.js檔, 寫預設 api
- 建一個user file
- fetch:
getServerSideProps
v.s getStaticProps
兩種拿資料的方法
- api: server side
- 點擊users page在server端打api, console出 '123'
- 輸入about page input 更新畫面, 假裝打api的console也會是在client side
getServerSideProps與getStaticProps差異?
- getServerSideProps是在client發送request的時候執行拿資料 ex: 高SEO的電商
- getStaticProps是在npm run build時拿資料 ex: 靜態網頁如需要高SEO的官網
How to Choose
Next.js 可依專案需求支援不同頁面決定要使用 CSR, SSR, SSG, ISR 等不同的渲染方式。
- 資料會不斷更新,且不需要 SEO 的頁面,可以考慮用 CSR,ex: 內部系統 dashboard。
- 資料會不斷更新,且需要 SEO 的頁面,可以考慮用 SSR。
需留意使用了 SSR 就要考慮 Server 端要處理的事情,因此可視專案架構、是否所有頁面都有 SEO 的需求,來決定 SSR 與 CSR 搭配的比例, ex: 電商下單頁面。
- 資料幾乎不用更新且需要 SEO,可以考慮用 SSG,ex: 部落格, 官網。
- 資料不需要頻繁更新且需要 SEO,可以考慮用 ISR(Incremental Static Regeneration),ex: 電商商品頁。
Ref
Next.js
Next render type:CSR, SSR, SSG, ISR20
CSS參考: