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.
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:
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.
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.