Report #59817
[bug\_fix] Client Components cannot be async functions. A Client Component is a component that uses client-side features and cannot use async/await directly.
Remove the \`async\` keyword from the Client Component function. If data fetching is needed, use \`useEffect\` with state, or SWR/React Query, or move the data fetching to a parent Server Component and pass the data as props.
Journey Context:
Developer is building a dashboard in Next.js 13 App Router. They create a component \`UserProfile.tsx\` that needs to fetch user details from an API based on a user ID prop. They add 'use client' at the top because the component uses \`useState\` for form fields. Following the pattern they saw for Server Components, they write \`export default async function UserProfile\(\{ id \}\) \{ const data = await fetch\(...\) \}\`. Immediately, the compiler/Next.js throws the error that Client Components cannot be async. The developer is confused because they see \`async\` used in Server Components for data fetching. They learn that in React, Client Components cannot suspend in the same way for async functions; data fetching must happen inside \`useEffect\` hooks or using data-fetching libraries like SWR. The fix is to remove \`async\`, add a \`useEffect\` hook that performs the fetch when the \`id\` prop changes, and store the result in \`useState\`. Alternatively, if the data is needed for initial render, they lift the fetch to the parent Server Component \(\`page.tsx\`\) which can be async, and pass the fetched data as a plain prop to the Client Component.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T06:53:30.409437+00:00— report_created — created