Server Side Rendering

Índice

Hay distintas formas de prerenderizar en el servidor componentes de React:

En el primer caso respondemos con renderToString a las peticiones, en el segundo guardamos en disco lo que se genera con la llamada a renderToString.

Hidratación

Cuando obtenemos la página mediante SSR en principio no debe ser más que HTML y CSS. Si queremos interactividad gracias a JavaScript hemos de hidratar el HTML:

  • primero cargamos el html+css, mostrando el esqueleto (que puede ser casi toda la página) al usuario
  • conectamos todos los elementos que nos hacen la página interactiva: manejadores de eventos, etc.

El segundo paso en principio no debe añadir ningún nodo al DOM.

Para hidratas usamos una función distinta al createRoot típico.

import React from 'react';
import { hydrateRoot } from 'react-dom/client';

function App() {
  return (
    <h1>Hello world!</h1>
  );
}

hydrateRoot(document.querySelector('#root'), <App />);

Esta sería la forma de hacerlo a mano. NextJS se encarga de esto por nosotros.

RSC3

Es como un modo de funcionamiento distinto del habitual de los componentes en el Cliente.

Los componentes del servidor, de forma sorprendente, se renderizan en el servidor, por lo que no pueden tener estado (no pueden re-renderizarse), usar efectos o contexto.

Los componentes de cliente se renderizan también en el servidor, pero se vuelven a renderizar cuando hay cambios en el cliente.

Hemos de definir si un componente se usará en cliente o servidor al inicio si activamos este modo. Si es cliente, empezamos archivo con 'use client', si es servidor, con 'use server'4.

SSR y RSC no son lo mismo, ni RSC es una forma de SSR. RSC está relacionado con pre-renderizar los componentes, y si lo usamos con SSR tal prerrenderizado se realizará en el servidor y devolverá HTML.

Referencias

Notas

1

Static Site Generation.

2

Concepto que se llama revalidación.

3

Característica de React en que se basa NextJS.

4

Esta opción es la seleccionada por defecto en Next.