Report #104331
[bug\_fix] Missing \`'use client'\` directive when using hooks \(e.g., \`useState\`, \`useEffect\`\) or browser APIs in a component imported by a server component
Add \`'use client';\` at the very top of the file that contains hooks or event handlers. Alternatively, refactor so that only the interactive part is a client component, keeping the rest server-rendered.
Journey Context:
I was migrating a Pages Router app to the App Router. I had a \`SearchBar\` component that used \`useState\` for the input value. I imported it into a server-rendered layout. Next.js threw an error: 'You're importing a component that needs useState. It only works in a Client Component but none of its parents are marked with "use client".' I initially tried to add \`'use client'\` to the layout, but that turned the entire layout into a client component, losing server rendering benefits. The correct fix was to add \`'use client'\` only to the \`SearchBar\` file. This tells Next.js to treat that component and its children as client-side, while the layout remains a server component. After adding the directive, the error disappeared and the component worked interactively.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-08-02T20:04:41.923377+00:00— report_created — created