React&NextJS
React&NextJSUnderstanding Component Rendering Order in Next.js App Router
(4 months ago)
Loading

Title: Understanding Component Rendering Order in Next.js App Router

When using the Next.js App Router, the rendering order of components might not always be what you expect, especially when mixing client and server components. Let's explore how the rendering order works.

Consider three components: ComponentA, ComponentB, and ComponentC. If you structure your page to have them one after the other, like this:

export default function Home() {
  return (
    <main>
      <ComponentA />
      <ComponentB />
      <ComponentC />
    </main>
  );
}

The rendering order will be A, B, C. However, if you use "transclusion" and nest the components using the children prop, like this:

export default function Home() {
  return (
    <main>
      <ComponentC>
        <ComponentB>
          <ComponentA />
        </ComponentB>
      </ComponentC>
    </main>
  );
}

The rendering order changes to C, B, A, based on the containment order.

Interestingly, if you make ComponentB a client component using the "use client" directive, the rendering order becomes C, A, B. The server components (RSCs) are rendered first, followed by the client component.

It's important to note that you shouldn't rely on the specific mechanics of component rendering when architecting your application. The rendering order can change unexpectedly if you convert an RSC to a client component or vice versa.