Renderizado e Hidratación de Aplicaciones React en el Servidor

Clase 10 de 17Curso de Server Side Render o SSR con React.js

Resumen

¿Cómo crear una aplicación de React en el servidor?

El desarrollo de aplicaciones React puede expandirse más allá del navegador y hacer uso del servidor, permitiendo el renderizado de nuestro proyecto desde el lado del servidor antes de enviarlo al cliente. Esto no solo mejora la carga inicial, sino que ofrece una mejor experiencia de usuario. Aquí exploraremos cómo lograr que una aplicación React sea enviada desde el servidor y luego se hidrate en el cliente con JavaScript.

¿Qué es el proceso de renderizado en el servidor y la hidratación?

El proceso de renderizado en el servidor (SSR) implica que la aplicación React se ejecute en el servidor para producir HTML antes de ser enviada al cliente. Es importante porque permite que las aplicaciones carguen más rápido, ya que el navegador recibe directamente HTML en lugar de JavaScript. Una vez que el HTML está cargado, React agrega la funcionalidad interactiva a través de un proceso llamado hidratación.

  1. Renderizar en el servidor: Produce HTML inicial que representa el estado de la aplicación.
  2. Hidratación: En el cliente, React toma el HTML generado y le agrega interactividad con JavaScript.

¿Cómo implementar el SSR en una aplicación de React?

Para implementar el proceso de SSR, comenzamos configurando nuestra aplicación para que funcione tanto en el servidor como en el cliente. Lo hacemos usando una estructura de JavaScript que comienza con TypeScript y React.

  1. Creación del archivo de renderizado: Dentro de un archivo llamado index.tsx, se importa React y la aplicación.

    import React from 'react';
    import App from './App';
    
  2. Configuración del Router: En SSR y en el cliente, es crucial tener configuradas las rutas adecuadamente. Para el servidor se usa StaticRouter y para el cliente, BrowserRouter.

    // En el lado del servidor
    import { StaticRouter } from 'react-router-dom/server';
    
    const MyApp = () => (
      <StaticRouter>
        <App />
      </StaticRouter>
    );
    

    Y para el cliente se envolvería así:

    import { BrowserRouter } from 'react-router-dom';
    
    const MyApp = () => (
      <BrowserRouter>
        <App />
      </BrowserRouter>
    );
    
  3. Función de renderizado: Se crea una función para exportar y renderizar nuestra aplicación en el servidor.

    import { renderToString } from 'react-dom/server';
    
    export function render(url) {
      return renderToString(
        <StaticRouter location={url}>
          <App />
        </StaticRouter>
      );
    }
    

¿Cómo se prepara el cliente para la hidratación?

Después de configurar el servidor, es fundamental preparar el cliente para completar el proceso de hidratación con Webpack:

  1. Generación del bundle de JavaScript: Configura Webpack para crear un bundle de tu aplicación React. Este archivo JavaScript se enviará al cliente para proporcionar la funcionalidad interactiva.
  2. Inclusión del script en el HTML: Asegúrate de que el HTML generado en el servidor incluya una referencia al bundle del JavaScript.
  3. Hidratación: Una vez en el cliente, React usará el bundle para hidratar tu aplicación.

Recomendaciones finales

Recuerda que tanto el lado del servidor como el del cliente deben ser idénticos. Cualquier diferencia puede causar advertencias de React sobre discrepancias entre el cliente y el servidor. Empezando desde la renderización de HTML hasta la hidratación con JavaScript, asegúrate de seguir cada paso de manera precisa para mantener la integridad de tu aplicación.

Este enfoque puede mejorar significativamente el desempeño de tu aplicación web y brindar una mejor experiencia al usuario. ¡Continúa aprendiendo y experimentando con React y el renderizado del lado del servidor para aprovechar al máximo las capacidades modernas de desarrollo web!