Report #71713
[bug\_fix] Next.js 15 Async Request APIs Breaking Change
Await the params/searchParams Promise in async Server Components, or use React.use\(\) to unwrap in Client Components. Root cause: Next.js 15 made route parameters asynchronous to support streaming and Partial Prerendering; they are now Promises, not plain objects.
Journey Context:
You upgrade from Next.js 14 to 15 and suddenly every page that accesses \`params.slug\` throws "Cannot read properties of undefined" or TypeScript screams that params is a Promise. You check the migration guide and realize that what used to be a synchronous object is now a Promise. You try to destructure \`\{ params \}\` in the function signature and access \`params.id\` immediately, but the data isn't there yet because the page is streaming. You consider reverting to Next.js 14 but need the performance improvements. You try wrapping everything in \`use\` but realize you're in a Server Component. The solution is to mark your Server Component as \`async\` and \`await params\` \(or searchParams\) before accessing its properties. In Client Components, you use the new \`React.use\(\)\` hook to unwrap the Promise. This works because Next.js 15 enforces that these dynamic APIs are asynchronous to allow the server to stream partial content without blocking on parameter resolution.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T02:57:25.297962+00:00— report_created — created