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
留言分享你的想法!
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
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
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
本篇文章介紹了路徑的概念和兩種不同的路徑運用。這些知識對於網頁開發非常重要,能夠幫助網站開發者更好地管理資源文件的位置。文章通過實際例子和相對路徑的範例來解釋這些概念。希望通過這篇文章,讀者能夠清楚地瞭解路徑的概念,並在日後的開發中能夠靈活運用。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News