page.js
page
ファイルは、Next.jsアプリケーションでページを定義するために使用されます。
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>
}
参照
プロパティ
params
(オプション)
ルートセグメントのルートからそのページまでの動的ルートパラメータを含むオブジェクトを解決するPromise。
app/shop/[slug]/page.tsx
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const slug = (await params).slug
}
ルート例 | 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
(オプション)
現在のURLの検索パラメータを含むオブジェクトに解決されるPromiseです。例:
app/shop/page.tsx
export default async function Page({
searchParams,
}: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
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
プロパティは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
プロパティを使用して、URLのクエリ文字列に基づいて、フィルタリング、ページネーション、またはソートを処理できます。
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
の読み取り
(非同期にできない)クライアントコンポーネントでsearchParams
とparams
を使用するには、Reactのuse
関数を使用してPromiseを読み取ることができます。
app/page.tsx
'use client'
import { use } from 'react'
export 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 が導入されました。 |
役に立ちましたか?