iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Modern Web

30 天淺入淺出 Next.js 13系列 第 13

Day13 - Routes Group 幫你的路由創個群組吧

  • 分享至 

  • xImage
  •  

今天中秋節前夕耶,就來聊聊簡單又好用的 Routes Group~
不知道明天還有沒有更輕鬆的主題(X

前言

app 文件中建立的資料夾都會成為某一個 route 的路徑。

Next 提供了一個特殊的命名方式,以這種方式命名的文件夾不會影響到 route,這讓我們可以在同一個路徑下建立 routes 的群組,讓 folder 的目的更清晰。

此外,與 layout.tsx 結合使用還能為該 routes group 建立共用 UI。

大綱

  • 怎麼建立 route group
  • layout.tsx 結合使用
  • 請不要撞名

怎麼建立 route group

非常簡單,只要用 () 把文件夾的名稱括起來,就可以在 app 底下建立一個不會影響 route 的 folder。

像是:app/(groupname)/about/page.tsx 實際的路徑為 /about

中間的 groupname 可以隨意填寫,不會影響 route。

layout.tsx 結合使用

route group 非常逆天的功能就是,這個不影響 route 的群組居然可以創建共用 UI:layout.tsx

layout 嵌套 route group 的 layout

這有點饒口,在建立 route group 以前,原本的 folder 還是保有自己的 layout,再加上 route group 底下自己的 layout,這樣會嵌套兩層 layout

這給了我們非常彈性的應用空間,因為它讓我們的在不影響 route 的情況下,可以為每一個 route group 建立自己的共用 UI。

為根目錄建立 route group

官網也有提到一個案例,如果網站提供兩種以上截然不同的呈現方式,可以在根目錄直接使用 route group 切分 route,每個 route 負責一種呈現方式。

可以去掉根目錄的 layout,只使用 route group 的 layout。如果是在根目錄這樣使用的話,每個 route group 也需要特別要加上 <html><body> tag。

請不要撞名

在建立 route group 要注意 route 撞名的問題,因為 () 包住的路徑是不會解析的,所以有可能不同的 route group 都建立了同樣的 route,這樣 Next 是會報錯滴。

以下就是 /about 撞名的範例

  • 建立 app/(firstGroup)/about/page.tsx
  • 建立 app/(secondGroup)/about/page.tsx

因為這兩個 route group 都在渲染了 /about,所以 Next 會噴錯。

Next: 你搞得我好亂ㄚ

參考文章


上一篇
Day12 - 導航(Linking & Navigating)
下一篇
Day14 - Layout 為頁面建立共用 UI
系列文
30 天淺入淺出 Next.js 1321
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言