page.js
page
ファイルを使用すると、ルートに固有の UI を定義できます。ファイルからコンポーネントをデフォルトエクスポートすることでページを作成できます:
export default function Page({
params,
searchParams,
}: {
params: Promise<{ slug: string }>
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
return <h1>My Page</h1>
}
export default function Page({ params, searchParams }) {
return <h1>My Page</h1>
}
知っておくと便利
page
には.js
、.jsx
、.tsx
ファイル拡張子を使用できます。page
は常にルートサブツリーのリーフ(末端)です。- ルートセグメントを公開可能にするには
page
ファイルが必要です。 - ページはデフォルトでサーバーコンポーネント (Server Components) ですが、クライアントコンポーネント (Client Component) に設定することもできます。
リファレンス
Props
params
(オプション)
ルートセグメントからそのページまでの動的ルートパラメータを含むオブジェクトに解決される Promise です。
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const { slug } = await params
}
export default async function Page({ params }) {
const { slug } = await params
}
例のルート | 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
prop は Promise です。値にアクセスするにはasync/await
または React のuse
関数を使用する必要があります。- バージョン 14 以前では、
params
は同期型の prop でした。後方互換性のために Next.js 15 でも同期的にアクセスできますが、この動作は将来非推奨になります。
- バージョン 14 以前では、
searchParams
(オプション)
現在の URL の検索パラメータ (search parameters) を含むオブジェクトに解決される Promise です。例:
export default async function Page({
searchParams,
}: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
const filters = (await searchParams).filters
}
export default async function Page({ searchParams }) {
const filters = (await searchParams).filters
}
例の 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
prop は Promise です。値にアクセスするにはasync/await
または React のuse
関数を使用する必要があります。- バージョン 14 以前では、
searchParams
は同期型の prop でした。後方互換性のために Next.js 15 でも同期的にアクセスできますが、この動作は将来非推奨になります。
- バージョン 14 以前では、
searchParams
は**動的 API (Dynamic API)** であり、その値は事前に知ることができません。これを使用すると、ページはリクエスト時に**動的レンダリング (dynamic rendering)** にオプトインされます。searchParams
はプレーンな JavaScript オブジェクトであり、URLSearchParams
インスタンスではありません。
例
params
に基づいたコンテンツの表示
動的ルートセグメント (dynamic route segments) を使用すると、params
prop に基づいてページの特定のコンテンツを表示または取得できます。
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const { slug } = await params
return <h1>Blog Post: {slug}</h1>
}
export default async function Page({ params }) {
const { slug } = await params
return <h1>Blog Post: {slug}</h1>
}
searchParams
を使用したフィルタリングの処理
searchParams
prop を使用して、URL のクエリ文字列に基づいてフィルタリング、ページネーション、またはソートを処理できます。
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>
)
}
export default async function Page({ searchParams }) {
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 を読み取ることができます:
'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)
}
'use client'
import { use } from 'react'
export default function Page({ params, searchParams }) {
const { slug } = use(params)
const { query } = use(searchParams)
}
バージョン履歴
バージョン | 変更点 |
---|---|
v15.0.0-RC | params と searchParams が Promise になりました。コードモッド (codemod) が利用可能です。 |
v13.0.0 | page が導入されました。 |