Checkout my CSS Grid By Example and Getting Started With React video courses on Skillshare. Sign up now and get one free month of Skillshare.

NextJs 13 – using Server Components in Client Components

We cannot directly import a server component into a client component in NextJs 13.

// ā›”ļø this will not work !!!

'use client';

import ReadFromDataBaseComponent from './ReadFromDataBaseComponent';

export default function ClientComponent() {
  // do something with ReadFromDataBaseComponent
}

The reason why we cannot import directly a server component into a client component is that the server component can have code for things like reading/writing files or databases that are only accessible on the server side.

To be able to use a server component in a client one we first need to render the server component and include just the resulting HTML in the client component. For this we need to wrap the Server component as a child (or property) for the Client component:

// šŸ‘ this works

export default function ClientComponent({ children }) {
  // do ClientComponent logic stuff here

  return (<>
    // ...
    {children}
  </>)
}

And now we can write in a NextJs 13 page:

import ClientComponent from "./ClientComponent";
import ReadFromDataBaseComponent from "./ReadFromDataBaseComponent";
```jsx
export default function Page() {
  return (
    <ClientComponent>
        // we will not have any server-side code here
        <ReadFromDataBaseComponent />
    </ClientComponent>
  );
}

The official documentation link on this subject.

Home Screencasts Best of Newsletter Search X