Report #87482
[bug\_fix] Next.js 15\+ async params access in dynamic routes
Change the Page component to be \`async\` and \`await\` the \`params\` prop, or use \`React.use\(params\)\` if it must remain synchronous. Update TypeScript types to reflect that params is a Promise.
Journey Context:
A developer upgrades from Next.js 14 to 15. Their dynamic route \`\[id\]/page.tsx\` previously accessed \`params.id\` directly: \`export default function Page\(\{ params \}: \{ params: \{ id: string \} \}\) \{ return \{params.id\}
\}\`. After the upgrade, TypeScript complains that \`params\` is possibly undefined or has type \`Promise<\{ id: string \}>\`. At runtime, they see \`\[object Promise\]\` rendered on the screen or errors about accessing properties of undefined. They check the Next.js 15 release notes and see that \`params\` and \`searchParams\` are now asynchronous Promises to support parallel rendering. They refactor the component to be async: \`export default async function Page\(\{ params \}: \{ params: Promise<\{ id: string \}> \}\) \{ const \{ id \} = await params; ... \}\`. The TypeScript errors disappear and the correct ID renders. Alternatively, for client components that cannot be async, they use the \`React.use\(params\)\` hook to unwrap the promise.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T05:25:35.817416+00:00— report_created — created