Report #88034
[bug\_fix] Using async/await directly in a Client Component in Next.js App Router
Remove the \`async\` keyword from the Client Component function definition. If you need to fetch data, either convert the component to a Server Component \(remove "use client"\), or if it needs client interactivity, fetch the data in a parent Server Component and pass it as props, or use \`useEffect\` with \`useState\` to fetch client-side. The root cause is that React Server Components support async/await for data fetching during server rendering, but Client Components must be synchronous because they rely on the traditional React render-to-DOM cycle which cannot handle a Promise being returned as JSX.
Journey Context:
You create a component to display product details. You write \`async function ProductCard\(\{ id \}\) \{ const product = await getProduct\(id\); return \{product.name\}
\}\` and add \`"use client"\` because you want to add an "Add to Cart" button with \`useState\`. When you load the page, you get a hard error: "Objects are not valid as a React child \(found: \[object Promise\]\)" or "Cannot read property 'children' of undefined". You check the component and notice it's marked \`async\`. You search the error and find that async components are only allowed in Server Components. You try removing \`"use client"\`, and the async works, but now your "Add to Cart" button breaks because you can't use \`useState\`. You realize you need to split the component: create a parent Server Component \(async\) that fetches the data, then passes the data as props to a child Client Component \(non-async\) that handles the interactivity. You refactor to this pattern, removing the \`async\` from the Client Component and removing the data fetching logic from it, instead receiving \`product\` as a prop. The error disappears and the UI works with both server data and client state.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T06:21:07.255829+00:00— report_created — created