NextJS - Routing - Routing Fundamentals

更新 發佈閱讀 5 分鐘

每個應用程式的骨架是路由。此頁將介紹網頁路由的基本概念,以及如何在 Next.js 中處理路由。

# 術語

  • 你會在文件中看到這些術語,以下是快速參考:
raw-image


# 元件樹的術語

  • tree:用來視覺化階層結構的一種約定。例如包含父元件和子元件的元件樹、資料夾結構等。
  • subtree:tree 的一部分,從 root(第一個節點)開始,直到 leaf(最後一個節點)結束。
  • root:tree 或 subtree 中的第一個節點,例如 root layout。
  • leaf:subtree 中沒有子節點的節點,例如 URL path 中的最後一個 segment。

# URL 結構的術語

  • URL Segment:由斜線分隔的 URL path 的一部分。
  • URL Path:出現在 domain 之後的部分,由多個 segment 組成。
  • 示意圖:
raw-image


APP Router

  • 在 Next.js 13 版本中,引入了基於 React 伺服器端元件的新 APP Router,支援 shared layouts、nested routing、loading states、error handling 等功能。
  • APP Router 位於名為 app 的新目錄中,該目錄與 pages 目錄並行,允許漸進式採用。這意味著 APP 的部分路由可以使用新行為,其他路由仍可以保留在 pages 目錄中。
  • 注意:APP router 優先於 Pages router。跨目錄的 routes 不應解析為相同的 URL 路徑,否則會在構建時引發衝突錯誤。
raw-image


  • 預設情況下,app 目錄中的元件是 React Server Components,這是一種性能優化方式。你也可以使用 Client Components。

# 資料夾與檔案的角色

  • Next.js 使用基於檔案系統的 route,資料夾用來定義 route。一個 route 是從根目錄到包含 page.js 檔案的最終葉子資料夾的嵌套路徑。
  • 檔案用來為路由段創建 UI。

# Route Segment

  • 路由中的每個資料夾代表一個 route segment。每個 route segment 對應 URL path 中的一個 segment。
raw-image


# Nested Routes

  • 如何將 route segment 映射到 URL segment
    • 你可以通過將資料夾嵌套在一起來創建 nested route。例如,在 app 目錄中嵌套兩個新資料夾即可新增 /dashboard/settings 路由。
    • /dashboard/settings 路由由三個 segment 組成:
      • / (root segment)
      • dashboard (segment)
      • settings (leaf segment)

# File Conventions

  • Next.js 提供了一組特殊檔案,用來為 nested route 創建具有特定行為的 UI:
    • layout 共享 segment 及其子 segment 的 UI
    • page route 的唯一 UI,並使 route 公開可訪問
    • loading segment 及其子 segment 的加載 UI
    • not-found segment 及其子 segment 的找不到頁面 UI
    • error segment 及其子 segment 的錯誤 UI
    • global-error 全局錯誤 UI
    • route Server Side API 端點
    • template 專門的 re-render layout UI
    • default Parallel Routes 的回退 UI
  • 注意:這些特殊檔案可以使用 .js、.jsx 或 .tsx 檔案副檔名。

# Component Hierarchy

  • 定義在 route segment 中的特殊檔案內的 React component 按特定的層次結構呈現:
    • layout.js
    • template.js
    • error.js (React 錯誤邊界)
    • loading.js (React 懸掛邊界)
    • not-found.js (React 錯誤邊界)
    • page.js 或嵌套 layout.js
  • 示意圖:
raw-image


# 檔案約定的元件層次結構

  • 在 nested route 中,segment 的 component 將嵌套在其 parent segment 的 component 內。
raw-image


# Co-location

  • 除了特殊檔案外,你還可以選擇將自己的檔案(如 components、styles、tests 等)共置在 app 目錄中的資料夾內。
  • 資料夾定義路由,但只有 page.js 或 route.js 返回的內容是公開可訪問的。
  • 示意圖
raw-image


# Advanced Routing Patterns

  • APP Router 還提供了一組 convention,幫助你實現更進階的路由模式。這些包括:
    • Parallel Routes:允許在同一視圖中同時顯示兩個或更多頁面,並且可以獨立導航。例如:儀表板。
    • Intercepting Routes:允許攔截一個路由,並在另一個路由的上下文中顯示它。例如:在編輯任務時保持任務列表,或在照片動態中放大照片。
  • 這些模式讓你能夠構建更豐富、更複雜的 UI,對小型團隊和個人開發者來說,以前這些功能的實現非常複雜。

# 參考

Next.js Documentation

留言
avatar-img
Learn or Die
0會員
16內容數
分享程式技術
Learn or Die的其他內容
2025/04/30
# 建立 Routes Next.js 使用基於檔案系統的路由器,資料夾用來定義 routes。 每個資料夾代表一個 route segment,對應到一個 URL segment。 要建立 nested routes,可以將資料夾彼此巢狀。 使用特殊的 page.js 檔案來讓 rou
Thumbnail
2025/04/30
# 建立 Routes Next.js 使用基於檔案系統的路由器,資料夾用來定義 routes。 每個資料夾代表一個 route segment,對應到一個 URL segment。 要建立 nested routes,可以將資料夾彼此巢狀。 使用特殊的 page.js 檔案來讓 rou
Thumbnail
2025/04/27
# Memoized Cache Driver 12.9 新增 memo cache driver,可以對 cache 在做一層 memory cache,比如第一次從 Redis cache 撈,但在同一個 req 當中,之後都可從 PHP Process memory 當中撈 <?php C
2025/04/27
# Memoized Cache Driver 12.9 新增 memo cache driver,可以對 cache 在做一層 memory cache,比如第一次從 Redis cache 撈,但在同一個 req 當中,之後都可從 PHP Process memory 當中撈 <?php C
2025/04/24
# Query Builder pipe() Method 12.4 新增 pipe() method 定義在特定 model,且只有該 model 可重複使用時,使用 scope 不一定要定義在 model,可定義在單獨 class,且可在多個 model 中 reuse,使用 tap 不
2025/04/24
# Query Builder pipe() Method 12.4 新增 pipe() method 定義在特定 model,且只有該 model 可重複使用時,使用 scope 不一定要定義在 model,可定義在單獨 class,且可在多個 model 中 reuse,使用 tap 不
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
這次要講的是 $route 及 $router 的區別,看似相似的兩個東西,其實應用時機也大不相同,以下以簡單的幾個例子舉例。
Thumbnail
這次要講的是 $route 及 $router 的區別,看似相似的兩個東西,其實應用時機也大不相同,以下以簡單的幾個例子舉例。
Thumbnail
Vue Router 動態路由,假設有一個賣場,裡面有 100 個商品,我們不可能針對它們創 100 對應的路由,因此我們需要一個動態路由,利用"路徑帶參數"的方式來撈取商品的資訊。
Thumbnail
Vue Router 動態路由,假設有一個賣場,裡面有 100 個商品,我們不可能針對它們創 100 對應的路由,因此我們需要一個動態路由,利用"路徑帶參數"的方式來撈取商品的資訊。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
本篇文章介紹了路徑的概念和兩種不同的路徑運用。這些知識對於網頁開發非常重要,能夠幫助網站開發者更好地管理資源文件的位置。文章通過實際例子和相對路徑的範例來解釋這些概念。希望通過這篇文章,讀者能夠清楚地瞭解路徑的概念,並在日後的開發中能夠靈活運用。
Thumbnail
本篇文章介紹了路徑的概念和兩種不同的路徑運用。這些知識對於網頁開發非常重要,能夠幫助網站開發者更好地管理資源文件的位置。文章通過實際例子和相對路徑的範例來解釋這些概念。希望通過這篇文章,讀者能夠清楚地瞭解路徑的概念,並在日後的開發中能夠靈活運用。
Thumbnail
當我剛開始接觸這個領域的時候,經常會看到有人在討論: 到底要做前端還是後端工程師呢?後端工程師賺的比前端工程師多?前端工程師轉後端工程師?那前端與後端到底是什麼呢? 這篇文章提供了前端與後端的基本概念並舉例來說明。同時也介紹了前端的三大要素以及後端的運作原理,對於想深入瞭解前後端的讀者會非常有幫助。
Thumbnail
當我剛開始接觸這個領域的時候,經常會看到有人在討論: 到底要做前端還是後端工程師呢?後端工程師賺的比前端工程師多?前端工程師轉後端工程師?那前端與後端到底是什麼呢? 這篇文章提供了前端與後端的基本概念並舉例來說明。同時也介紹了前端的三大要素以及後端的運作原理,對於想深入瞭解前後端的讀者會非常有幫助。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News