Concepto clave
El App Router en Next.js 15 representa un cambio fundamental en cómo estructuramos aplicaciones web. Imagina que estás construyendo una casa: antes tenías que decidir dónde poner cada habitación desde el principio, pero ahora tienes un sistema modular donde cada habitación se construye independientemente y se conecta automáticamente. El App Router funciona así: cada carpeta en tu proyecto se convierte en una ruta, y los archivos dentro definen el contenido y comportamiento de esa página.
Los Server Components son componentes React que se renderizan exclusivamente en el servidor. Piensa en ellos como chefs en una cocina profesional: preparan todo lo necesario (datos, HTML) antes de servir el plato al cliente. Esto elimina la necesidad de enviar JavaScript innecesario al navegador y mejora el rendimiento inicial. En Next.js 15, todos los componentes son Server Components por defecto, a menos que explícitamente los marques como client components.
Cómo funciona en la práctica
Para configurar el App Router en Next.js 15, sigue estos pasos:
- Crea un nuevo proyecto con
npx create-next-app@latesty selecciona las opciones para App Router - Observa la estructura generada: tendrás una carpeta
appen la raíz - Dentro de
app, crea carpetas para tus rutas. Por ejemplo:app/dashboardpara la ruta /dashboard En cada carpeta de ruta, crea un archivopage.jsque exporte un componente ReactConfigura el layout global enapp/layout.jsy los metadatos enapp/metadata.js
Ejemplo básico de estructura:
app/
layout.js
page.js
dashboard/
page.js
settings/
page.js
api/
users/
route.jsCaso de estudio
Vamos a construir un dashboard de administración para una tienda online. Necesitamos:
Página principal (/): muestra estadísticas generalesPágina de productos (/products): lista todos los productosPágina de pedidos (/orders): muestra pedidos recientesAPI para productos (/api/products): endpoint REST
Estructura resultante:
| Carpeta | Archivo | Propósito |
|---|---|---|
| app/ | layout.js | Layout global con navegación |
| app/ | page.js | Página principal con estadísticas |
| app/products/ | page.js | Lista de productos (Server Component) |
| app/orders/ | page.js | Tabla de pedidos |
| app/api/products/ | route.js | Endpoint API para productos |
Los Server Components pueden hacer fetch de datos directamente sin useEffect, simplificando considerablemente el código.Errores comunes
Mezclar Server y Client Components incorrectamente: No puedes usar hooks como useState en Server Components. Si necesitas interactividad, marca el componente con 'use client' en la primera línea.Estructura de carpetas incorrecta: El App Router requiere que las rutas sean carpetas con archivos page.js. No uses archivos con otros nombres para definir rutas.Olvidar el layout.js: Cada carpeta puede tener su propio layout.js que se aplica a todas las subrutas. Si no lo defines, se usa el layout más cercano en la jerarquía.No aprovechar la carga en streaming: Next.js 15 permite streaming SSR por defecto. Asegúrate de usar Suspense para componentes que cargan datos lentamente.Configuración incorrecta de metadatos: Los metadatos deben definirse en layout.js o page.js usando export const metadata, no en componentes regulares.
Checklist de dominio
Puedo crear una nueva aplicación Next.js 15 con App Router desde ceroEntiendo la diferencia entre Server Components y Client ComponentsSé estructurar rutas anidadas usando carpetas en el directorio appPuedo configurar un layout global y layouts específicos por rutaSé crear API routes dentro del App RouterPuedo implementar streaming SSR usando SuspenseEntiendo cómo los Server Components mejoran el rendimiento inicial
Configura una aplicación de blog con App Router
En este ejercicio, crearás la estructura básica de un blog usando el App Router de Next.js 15. Sigue estos pasos:
- Crea un nuevo proyecto Next.js 15 usando el comando oficial de creación
- Configura la estructura de carpetas dentro de
app para las siguientes rutas:- / (página principal del blog)
- /blog (lista de artículos)
- /blog/[slug] (página individual de artículo)
- /about (página acerca de)
- Crea un layout global en
app/layout.js que incluya:- Un header con navegación a las páginas principales
- Un footer con información de copyright
- En
app/blog/[slug]/page.js, implementa un Server Component que:- Reciba el parámetro slug de la URL
- Simule la carga de datos de un artículo (puedes usar datos mock)
- Muestre el título y contenido del artículo
- Agrega un archivo
app/api/articles/route.js que devuelva una lista de artículos en formato JSON
Pistas- Recuerda que los parámetros dinámicos en rutas se definen con carpetas entre corchetes, como [slug]
- Puedes usar fetch directamente en Server Components sin async/await adicional
- Para el layout global, exporta un componente React que reciba children como prop
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.