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>
}

知っておくと便利

リファレンス

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
}
例のルートURLparams
app/shop/[slug]/page.js/shop/1Promise<{ slug: '1' }>
app/shop/[category]/[item]/page.js/shop/1/2Promise<{ category: '1', item: '2' }>
app/shop/[...slug]/page.js/shop/1/2Promise<{ slug: ['1', '2'] }>
  • params prop は Promise です。値にアクセスするには async/await または React の use 関数を使用する必要があります。
    • バージョン 14 以前では、params は同期型の prop でした。後方互換性のために Next.js 15 でも同期的にアクセスできますが、この動作は将来非推奨になります。

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
}
例の URLsearchParams
/shop?a=1Promise<{ a: '1' }>
/shop?a=1&b=2Promise<{ a: '1', b: '2' }>
/shop?a=1&a=2Promise<{ a: ['1', '2'] }>
  • searchParams prop は Promise です。値にアクセスするには async/await または React の use 関数を使用する必要があります。
    • バージョン 14 以前では、searchParams は同期型の prop でした。後方互換性のために Next.js 15 でも同期的にアクセスできますが、この動作は将来非推奨になります。
  • 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>
  )
}

クライアントコンポーネントでの searchParamsparams の読み取り

クライアントコンポーネント(async にできない)で searchParamsparams を使用するには、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-RCparamssearchParams が Promise になりました。コードモッド (codemod) が利用可能です。
v13.0.0page が導入されました。