Report #95804
[bug\_fix] useState only works in a Client Component but nothing marked it as one
Add the 'use client' directive as the absolute first line of the component file \(before imports\) to indicate it must be rendered on the client and can use hooks like useState, useEffect, or browser APIs.
Journey Context:
Developer creates a new file Button.tsx and writes \`import \{ useState \} from 'react'; export function Button\(\) \{ const \[count, setCount\] = useState\(0\); ... \}\`. Immediately upon importing this into a page, Next.js throws: 'Error: useState only works in a Client Component but nothing marked it as one'. Developer is confused because in the Pages Router, all components ran on both server and client. They try moving the component to the app directory root, then try renaming it to .client.tsx \(which isn't a convention in Next.js\). Eventually they find that adding 'use client' at the very top of the file \(above the imports\) opts the entire module into the client bundle, allowing hooks to work. The root cause is that the App Router defaults to Server Components which execute in a Node.js environment where React hooks and browser globals don't exist.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T19:23:22.967353+00:00— report_created — created