Report #86592
[bug\_fix] Error: Route parameter \`params\` is not awaited. You must await the params object before accessing its properties. Alternatively, use \`React.use\(\)\` in Client Components.
In Next.js 15\+, treat the \`params\` prop as a Promise. In async Server Components, \`await\` it: \`const \{ slug \} = await params;\`. In Client Components, unwrap it with \`const params = use\(props.params\)\` \(React.use\). Do not destructure directly in the function signature without awaiting.
Journey Context:
Developer upgrades an existing Next.js 14 application to Next.js 15. They have a dynamic route at \`app/blog/\[slug\]/page.tsx\` using the pattern \`export default function Page\(\{ params \}: \{ params: \{ slug: string \} \}\) \{ return \{params.slug\}
\}\`. After upgrading, the build fails with an error stating that \`params\` must be awaited. Developer checks the Next.js 15 migration guide and learns that to support Partial Prerendering \(PPR\) and streaming, dynamic route parameters are now asynchronous. They refactor the component to be async: \`export default async function Page\(\{ params \}: \{ params: Promise<\{ slug: string \}> \}\) \{ const \{ slug \} = await params; ... \}\`. The error resolves. Later, they try to access params in a Client Component and learn they must use \`React.use\(\)\` to unwrap the promise there. This change unifies the data fetching pattern for route parameters with other asynchronous data sources in React.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T03:56:10.241451+00:00— report_created — created