page.js 檔案
page
檔案允許您定義路由專屬的 UI。您可以透過從檔案中預設匯出一個元件來建立頁面:
須知事項
page
可以使用.js
、.jsx
或.tsx
副檔名。page
始終是路由子樹的葉節點。- 必須有
page
檔案才能使路由區段公開可存取。 - 頁面預設為伺服器元件 (Server Components),但可以設定為客戶端元件 (Client Component)。
參考
屬性
params
(選用)
一個解析為物件的 Promise,包含從根區段到該頁面的動態路由參數。
範例路由 | URL | params |
---|---|---|
app/shop/[slug]/page.js | /shop/1 | Promise<{ slug: '1' }> |
app/shop/[category]/[item]/page.js | /shop/1/2 | Promise<{ category: '1', item: '2' }> |
app/shop/[...slug]/page.js | /shop/1/2 | Promise<{ slug: ['1', '2'] }> |
- 由於
params
屬性是一個 Promise,您必須使用async/await
或 React 的use
函式來存取其值。- 在版本 14 及更早版本中,
params
是同步屬性。為了向後相容,在 Next.js 15 中仍可同步存取,但此行為將在未來棄用。
- 在版本 14 及更早版本中,
searchParams
(選用)
一個解析為物件的 Promise,包含當前 URL 的搜尋參數。例如:
範例 URL | searchParams |
---|---|
/shop?a=1 | Promise<{ a: '1' }> |
/shop?a=1&b=2 | Promise<{ a: '1', b: '2' }> |
/shop?a=1&a=2 | Promise<{ a: ['1', '2'] }> |
- 由於
searchParams
屬性是一個 Promise,您必須使用async/await
或 React 的use
函式來存取其值。- 在版本 14 及更早版本中,
searchParams
是同步屬性。為了向後相容,在 Next.js 15 中仍可同步存取,但此行為將在未來棄用。
- 在版本 14 及更早版本中,
searchParams
是一個**動態 API,其值無法預先得知。使用它將使頁面在請求時選擇動態渲染 (dynamic rendering)**。searchParams
是一個純 JavaScript 物件,不是URLSearchParams
實例。
範例
根據 params
顯示內容
使用動態路由區段,您可以根據 params
屬性顯示或取得頁面的特定內容。
使用 searchParams
處理篩選
您可以使用 searchParams
屬性來處理基於 URL 查詢字串的篩選、分頁或排序。
在客戶端元件中讀取 searchParams
和 params
要在客戶端元件(不能是 async
)中使用 searchParams
和 params
,可以使用 React 的 use
函式來讀取 Promise:
版本歷史
版本 | 變更 |
---|---|
v15.0.0-RC | params 和 searchParams 現在是 Promise。提供了一個程式碼轉換工具 (codemod)。 |
v13.0.0 | 引入 page 。 |