Antes de elegir cómo construir tu sitio con React, necesitas entender dos enfoques que definen la experiencia del usuario y el SEO: Single Page Application (SPA) y Server-side rendering (SSR). De esa decisión depende qué herramienta usar, y por qué React Router Dom encaja perfecto cuando trabajas con SPA en Vite.
¿Cuál es la diferencia entre Single Page Application y Server-side rendering?
Las dos arquitecturas resuelven el mismo problema (mostrarle contenido al usuario), pero lo hacen de forma opuesta.
Una Single Page Application carga todo el HTML de tu sitio de una sola vez. Eso genera un pequeño retraso inicial porque el navegador descarga todo el peso junto, pero después la navegación entre vistas se siente fluida e instantánea. El usuario no percibe recargas: todo ya está ahí.
El Server-side rendering, en cambio, entrega el HTML desde el servidor página por página. La carga inicial es rápida, pero cada vez que navegas a una nueva vista, el servidor vuelve a generar y enviar el HTML correspondiente.
¿Cuándo usar SPA y cuándo usar SSR? Usa SPA cuando priorizas fluidez y experiencia de usuario dentro de la app. Usa SSR cuando necesitas que los motores de búsqueda indexen tu contenido, porque el HTML llega listo desde el servidor [01:45].
¿Qué herramientas elegir según el enfoque?
La decisión técnica se traduce en stack:
Si quieres SSR con sistema de rutas integrado, usa NextJS.
Si vas con SPA y quieres control sobre el enrutamiento del lado del cliente, usa React Router Dom.
Si buscas un bundler rápido para desarrollar, Vite es ideal para arrancar.
¿Cómo crear un proyecto con Vite y React Router Dom?
Vamos a montar el proyecto base paso a paso. Abre tu terminal y escribe:
bash
npm create vite@latest my-react-router-app
Elige React y TypeScript cuando te lo pregunte. Entra a la carpeta, instala dependencias y arranca el servidor:
bash
cd my-react-router-app
npm install
npm run dev
Con el proyecto corriendo en el localhost, instala la librería de enrutamiento:
bash
npm install react-router-dom
Abre el package.json y quítale el gorrito (^) a la versión de react-router-dom para fijarla. Así garantizas que cualquiera que clone el proyecto trabaje con la misma versión [05:30].
¿Cómo se configura BrowserRouter en main.tsx?
BrowserRouter es el componente que envuelve tu aplicación y habilita el enrutamiento en toda la app. Sin él, los demás componentes de React Router Dom no funcionan.
En main.tsx importa el componente y envuelve <App />:
tsx
import { BrowserRouter } from 'react-router-dom'
<BrowserRouter>
<App />
</BrowserRouter>
Esto deja toda tu aplicación lista para definir rutas en cualquier nivel.
¿Cómo crear rutas y navegación con Link, Routes y Route?
Dentro de App.tsx necesitas tres piezas clave de react-router-dom: Link, Routes y Route. Cada una cumple un rol distinto.
Link reemplaza a la etiqueta <a> y permite navegar sin recargar la página.
Routes es el contenedor que agrupa todas las rutas disponibles.
Route define una ruta individual con su path y el element que debe renderizar.
El código base queda así:
tsx
import { Routes, Route, Link } from 'react-router-dom'
La propiedad to en Link indica a qué ruta navegar. La propiedad path en Route define qué URL activa cada componente. Cuando das clic en About, la URL cambia a /about y se renderiza el componente correspondiente sin recargar la página [10:20].
¿Qué hace BrowserRouter en una app de React? Es el contenedor que conecta tu aplicación con el historial del navegador y permite que los componentes Link, Routes y Route gestionen la navegación sin recargar.
¿Por qué usar Link en lugar de la etiqueta a tradicional?
Un <a href> tradicional hace que el navegador recargue toda la página, lo que rompe la experiencia SPA. Link, en cambio, intercepta el clic y actualiza solo la vista que cambia, manteniendo el estado de la aplicación intacto.
Esa diferencia es la que hace que una Single Page Application se sienta como una app nativa: rápida, sin parpadeos y sin pérdidas de contexto.
Ahora te toca a ti. Cuéntame en los comentarios cómo te quedó tu vista inicial y compárteme cómo la estilizaste, porque por defecto se ve bastante simple. ¿Le pusiste Tailwind, CSS modules o algo distinto?
muy buena explicación, eres una gran profe. Me encantan tus clases.
Ay Juan !!! Gracias por tu comentario... me alegra muchísimo 🩵
Server-Side Rendering (SSR) es ideal cuando se busca una carga inicial rápida y mejor SEO, ya que el HTML se pre-renderiza en el servidor. Es útil para aplicaciones donde la optimización de motores de búsqueda es crucial. Por otro lado, una Single Page Application (SPA) ofrece una experiencia más fluida al cargar todo el HTML de inmediato, permitiendo una navegación rápida entre vistas. Se recomienda usar SPAs para aplicaciones interactivas, donde el rendimiento en la navegación es fundamental. Ambas tienen sus ventajas, eligiendo según las necesidades del proyecto.
:clap: :clap: :clap:
Esperando algo de SSR, y solo un comentario?,
entiendo que esto es mas de una clase,
claro bro, dijeron que si querias hacer algo ssr podias usar nextjs. Sera un curso o mas completos.
Ya salió la nueva versión de React Router, la versión 7, que se fusionó con Remix.
En una SPA (Single Page Application), todo se renderiza en el navegador. El usuario interactúa con una sola página que cambia dinámicamente sin recargar. Ejemplo: un contador en React donde el contenido se actualiza con useState. Ideal para aplicaciones rápidas, pero no tan buenas para SEO.
En cambio, con SSR (Server Side Rendering), como en Next.js, el servidor genera el HTML antes de enviarlo al cliente. Esto mejora la velocidad de carga y el posicionamiento en buscadores, ya que el contenido llega listo para mostrarse. Ideal para webs públicas o de contenido dinámico.
Asi quedaron mis rutas con sus estilos estoy usando tailwinds
Esto no era lo que se hacia con PHP? porque darle estos atributos a js? no lo hace mas lento?
Quisiera entender. Si yo quiero SSR no deberia tener un lenguaje mas eficiente para esto? Antaño se hacia con php / jsf / aspx, solo me surge esa duda