Next.js
/Advanced
Component Boundaries
Definition
The strict rules governing how Server Components and Client Components can interact and be nested within each other.
Explain Like I'm New
Rule 1: Server Components can import Client Components. Rule 2: Client Components CANNOT import Server Components. Once you are on the Client, you cannot magically go back to the Server. (However, you CAN pass a Server Component as a `children` prop into a Client Component).
Real World Example
You have a Client Component `<CollapsibleSidebar>` that manages `isOpen` state. You want to put a Server Component `<DatabaseUserList>` inside it. You cannot import it directly. You must pass it as a `children` prop from a higher-level Server page.
Common Use Cases
- •Advanced Layout Architecture
- •Interleaving server and client code
Interactive Example
/* ❌ ILLEGAL: Client Component importing a Server Component */ // ClientWrapper.tsx 'use client'; import ServerChild from './ServerChild'; // ERROR! Cannot do this. /* ✅ LEGAL: Using Composition (The "Hole" pattern) */ // ClientWrapper.tsx 'use client'; export default function ClientWrapper({ children }) { const [isOpen, setIsOpen] = useState(false); return <div onClick={() => setIsOpen(true)}>{isOpen && children}</div>; } // page.tsx (Server Component) import ClientWrapper from './ClientWrapper'; import ServerChild from './ServerChild'; // Fetches DB data export default function Page() { return ( // The Server Component orchestrates them together! <ClientWrapper> <ServerChild /> </ClientWrapper> ); }
Interview Questions
basic
- Can a Server Component import a Client Component?
intermediate
- If a Client Component cannot import a Server Component, how do you put Server-rendered content inside a Client-side wrapper?