Report #94810
[bug\_fix] Passing Server Component directly to Client Component as child/prop
Do not pass a Server Component as a prop or child to a Client Component. Instead, the Server Component should import and wrap the Client Component, passing serializable data \(strings, numbers, plain objects\) as props, or use the children pattern where the Server Component renders the Client Component with JSX children that are already rendered server-side. Root cause: Server Components are non-serializable functions; they cannot cross the client bundle boundary which requires serializable props.
Journey Context:
Developer creates an InteractiveWrapper.tsx with "use client" that accepts children props. In page.tsx \(Server Component\), they write . Build fails with "Error: Only plain objects can be passed to Client Components from Server Components. Objects with toJSON methods are not supported." Developer is confused because they thought children were allowed. Realizes that passing a Server Component as children to a Client Component means the Server Component must be serialized across the boundary, which is impossible. Finds the Next.js composition patterns doc. Refactors: page.tsx imports ExpensiveServerComponent, gets its data, then renders
or better, realizes they should structure it so InteractiveWrapper is a client boundary inside the Server Component, but children passed to it must be already-rendered markup or serializable primitives. Correct pattern: Server Component imports Client Component and wraps it, passing data fetched on server as props.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T17:43:14.981540+00:00— report_created — created