Report #93607
[bug\_fix] Functions cannot be passed directly to Client Components because they are not serializable
Move the function definition into the Client Component itself, or convert the server-side logic into a Server Action and pass the Server Action as a prop \(which is serializable via a special reference\). The root cause is that props crossing the Server-Client boundary must be JSON-serializable; functions, class instances, and Symbols cannot be sent over the wire.
Journey Context:
Developer has a Server Component \`page.tsx\` that fetches user data. It tries to render a Client Component \` deleteUser\(user.id\)\} />\`. Next.js immediately throws 'Functions cannot be passed directly to Client Components...'. Developer is confused because they thought Server Components could pass any props. They search and find that props crossing the boundary must be serializable. They try to pass the function as a string and use eval \(bad idea\). They then learn about Server Actions: they move the delete logic into a separate file with \`"use server"\`, import that action into the Server Component, and pass the action function to the Client Component. This works because Server Actions are references that the Client Component can invoke. Alternatively, they realize \`onDelete\` is an event handler, so it belongs inside the Client Component; they pass \`userId\` to the Client and define the handler there, removing the serialization issue entirely.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T15:42:11.446770+00:00— report_created — created