Explorer
KNOW-PAT-138

Next.js 15 — params et searchParams sont des Promises

Domaine
all
Type
pattern
Priorité
P1

Parent : [[INDEX-GLOBAL]]

Next.js 15 — params et searchParams comme Promises

Problème

Après migration Next.js 14 → 15, le build échoue avec une erreur de type sur les pages dynamiques :

Type '{ params: { id: string; } }' does not satisfy 'PageProps'.
  Types of property 'params' are incompatible.

Solution

Dans Next.js 15, params et searchParams sont des Promises qu'il faut await.

Correct

// page.tsx (route dynamique)
export default async function ModelPage(
  { params }: { params: Promise<{ id: string }> }
) {
  const { id } = await params
  // utiliser id...
}

// page.tsx avec searchParams
export default async function NewsPage(
  { searchParams }: { searchParams?: Promise<{ category?: string }> }
) {
  const sp = searchParams ? await searchParams : undefined
  const category = sp?.category
}

// generateMetadata aussi
export async function generateMetadata(
  { params }: { params: Promise<{ id: string }> }
): Promise<Metadata> {
  const { id } = await params
  // ...
}

Incorrect

// Next.js 14 style — ne compile plus en v15
export default async function ModelPage(
  { params }: { params: { id: string } }  // ❌
) {
  const id = params.id  // ❌
}

Pourquoi ça marche

Next.js 15 utilise un modèle async unifié pour les Server Components. params et searchParams sont résolus dynamiquement et doivent être awaited pour garantir la cohérence du rendu streaming.

Quand ne PAS l'utiliser

  • Si vous restez sur Next.js 14, ne changez rien.
  • Dans les Client Components, useParams() reste synchrone.

Source

  • Projet : ai-hub
  • Contexte : Migration Next.js 14.2.35 → 15.3.0
  • Validé le : 2026-05-16