Report #6841
[bug\_fix] Next.js 15 async params/searchParams access without await
Await the \`params\` and \`searchParams\` props in async Page components, as they are now Promises in Next.js 15. Root cause: Next.js 15 changed route params to be asynchronous to support Partial Prerendering \(PPR\) and dynamicIO, allowing the shell to render before params resolve.
Journey Context:
Developer upgrades their Next.js 14 App Router application to Next.js 15. Their dynamic route at \`app/\[slug\]/page.tsx\` suddenly throws TypeScript errors or runtime errors stating that params is a Promise. They destructured it as \`\{ params \}: \{ params: \{ slug: string \} \}\` and used \`params.slug\` directly. Now they see errors suggesting they must await it. They check the migration guide and discover that in Next.js 15, Page components receive params as a Promise to allow the page to start rendering before params are resolved \(enabling PPR\). They refactor their component to be async: \`export default async function Page\(\{ params \}: \{ params: Promise<\{ slug: string \}> \}\) \{ const \{ slug \} = await params; ... \}\`. They apply the same fix for \`searchParams\`. The build passes and they benefit from faster time-to-first-byte for static shells.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T01:12:04.315280+00:00— report_created — created