page.js
page
檔案讓您定義特定路由的 UI。您可以透過從檔案預設匯出元件來建立頁面
app/blog/[slug]/page.tsx
export default function Page({
params,
searchParams,
}: {
params: Promise<{ slug: string }>
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
return <h1>My Page</h1>
}
要知道
參考
Props (屬性)
params
(選填)
一個 Promise,解析為一個物件,其中包含從根區段到該頁面的動態路由參數。
app/shop/[slug]/page.tsx
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const slug = (await params).slug
}
路由範例 | 網址 | 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,解析為一個物件,其中包含目前網址的搜尋參數。例如
app/shop/page.tsx
export default async function Page({
searchParams,
}: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
const filters = (await searchParams).filters
}
範例網址 | 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,其值無法預先得知。使用它會使頁面在請求時選擇動態渲染。searchParams
是一個純 JavaScript 物件,而不是URLSearchParams
實例。
範例
根據 params
顯示內容
使用動態路由區段,您可以根據 params
屬性顯示或擷取頁面的特定內容。
app/blog/[slug]/page.tsx
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const { slug } = await params
return <h1>Blog Post: {slug}</h1>
}
使用 searchParams
處理篩選
您可以使用 searchParams
屬性來處理基於網址查詢字串的篩選、分頁或排序。
app/shop/page.tsx
export default async function Page({
searchParams,
}: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
const { page = '1', sort = 'asc', query = '' } = await searchParams
return (
<div>
<h1>Product Listing</h1>
<p>Search query: {query}</p>
<p>Current page: {page}</p>
<p>Sort order: {sort}</p>
</div>
)
}
在用戶端元件中讀取 searchParams
和 params
若要在用戶端元件(不能是 async
)中使用 searchParams
和 params
,您可以使用 React 的 use
函式來讀取 Promise
app/page.tsx
'use client'
import { use } from 'react'
export default function Page({
params,
searchParams,
}: {
params: Promise<{ slug: string }>
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
const { slug } = use(params)
const { query } = use(searchParams)
}
版本歷史
版本 | 變更 |
---|---|
v15.0.0-RC | params 和 searchParams 現在是 Promise。Codemod 可用。 |
v13.0.0 | 引入 page 。 |
這篇文章對您有幫助嗎?