Saltar al contenido

Lección 3 de 17 · Lectura y práctica

Práctica: Crear una página con Server Components

Tipo de lección: VideoConcepto claveLos Server Components en Next.js 15 representan un cambio fundamental en cómo construimos aplicaciones web. A diferencia de los componentes de React tradicionales que se renderizan en el.

Del concepto a la práctica

Taller de esta lección

Una página de servidor puede consultar datos y construir una vista sin convertir la consulta en estado del navegador. Trabajaremos con una función local determinista que devuelve dos artículos, para observar la separación entre obtención y presentación.

Ejemplo resuelto

tsx
const articles = [
  { title: 'Caché', author: 'Nora' },
  { title: 'Rutas', author: 'Luis' }
]
export default async function Page() {
  return <main><ul>{articles.map(a => <li key={a.title}>{a.title} — {a.author}</li>)}</ul></main>
}

La salida visible contiene Caché — Nora y Rutas — Luis; no hace falta useEffect.

Pruébalo

  1. Sustituye los datos por tres registros con title y author.

  2. Renderiza una lista con una clave estable.

  3. Añade un encabezado que indique el número de registros.

  4. Verifica que el texto coincide con el array.

Comprueba tu resultado

Error frecuente: usar useState para datos que no cambian durante el renderizado. Corrígelo manteniendo la colección en el servidor. Resultado esperado: tres filas y un encabezado con 3 artículos; cada fila conserva exactamente el título y autor de su registro.

De los títulos a identificadores

Los dos títulos son únicos únicamente en este fixture. Si aceptas títulos repetidos usa id estable como key, por ejemplo a1, a2 y a3. Comprueba también []: el encabezado indica 0 artículos y una frase explica que no hay registros. Este array local demuestra renderizado, no una consulta remota; mide solicitudes de red solo cuando reemplaces la función por una fuente real.

Servidor que produce HTML y navegador que lo muestra y gestiona la interacción; claves sensibles permanecen en el servidor.
CursaloMapa de práctica
Dónde se ejecuta cada parte

El servidor puede obtener datos y producir el HTML inicial. El navegador muestra el resultado y ejecuta las interacciones que necesitan estado local. Mantén las claves sensibles en el servidor y define qué parte se ejecuta en cada entorno.

Ver la infografía en tamaño completo ↗
Fuentes para profundizar

Tipo de lección: Video

Concepto clave

Los Server Components en Next.js 15 representan un cambio fundamental en cómo construimos aplicaciones web. A diferencia de los componentes de React tradicionales que se renderizan en el cliente, estos componentes se ejecutan exclusivamente en el servidor. Imagina que estás construyendo un dashboard financiero: en lugar de enviar todo el código y datos al navegador para que el usuario espere mientras se procesa, el servidor prepara la interfaz completa y envía solo el HTML final. Esto reduce drásticamente el tamaño del bundle JavaScript y mejora el rendimiento inicial.

El App Router es la nueva estructura de enrutamiento basada en el sistema de archivos. Cada carpeta dentro de app representa una ruta, y los archivos como page.js definen el contenido. Cuando combinas esto con Server Components, obtienes una arquitectura donde el servidor puede renderizar páginas completas sin necesidad de JavaScript en el cliente para el contenido estático. Piensa en ello como un restaurante: el cliente (navegador) recibe el plato ya cocinado (HTML renderizado), en lugar de los ingredientes crudos (código y datos) que tendría que preparar.

Los Server Components no pueden usar hooks como useState o useEffect, ya que no se ejecutan en el cliente. Esto los hace ideales para tareas pesadas como consultas a bases de datos o procesamiento de datos.

Cómo funciona en la práctica

Vamos a crear una página simple que muestre una lista de productos desde una API. Primero, en tu proyecto Next.js 15, navega a la carpeta app y crea una nueva carpeta llamada productos. Dentro, crea un archivo page.js. Este será nuestro Server Component.

// app/productos/page.js
export default async function ProductosPage() {
  // Esta función se ejecuta en el servidor
  const response = await fetch('https://api.ejemplo.com/productos');
  const productos = await response.json();

  return (
    

Lista de Productos

    {productos.map((producto) => (
  • {producto.nombre} - ${producto.precio}
  • ))}
); }

Observa que usamos async/await directamente en el componente. Esto es posible porque se ejecuta en el servidor. El HTML generado se enviará al cliente, y si habilitas Streaming SSR, los datos pueden cargarse progresivamente. Para probarlo, ejecuta npm run dev y visita http://localhost:3000/productos. Verás la lista renderizada sin JavaScript en el cliente para los datos.

Caso de estudio

Supongamos que estás construyendo un blog con Next.js 15. Quieres mostrar artículos desde una base de datos, con información como título, autor y fecha. Usando Server Components, puedes optimizar esto para SEO y rendimiento.

ComponenteTipoFunción
ArticleListServer ComponentObtiene artículos desde la DB y renderiza la lista
ArticleItemServer ComponentMuestra detalles de un artículo
LikeButtonClient ComponentManeja interacciones del usuario

En app/blog/page.js, defines un Server Component que consulta la base de datos:

import { db } from '@/lib/db';

export default async function BlogPage() {
  const articulos = await db.articulos.findMany();
  return (
    
{articulos.map((articulo) => (

{articulo.titulo}

Por {articulo.autor} el {articulo.fecha}

{articulo.contenido}

))}
); }

Esto asegura que el contenido sea indexable por motores de búsqueda y se cargue rápidamente, ya que no depende de JavaScript en el cliente.

Errores comunes

  • Usar hooks de React en Server Components: Intentar usar useState o useEffect causará un error. Solución: Mueve la lógica interactiva a un Client Component usando 'use client'.
  • No manejar errores en fetch: Las peticiones en Server Components pueden fallar. Usa try-catch o configura opciones de fetch con next: { revalidate: 60 } para caching.
  • Olvidar que los Server Components son asíncronos: Asegúrate de usar async/await correctamente y manejar estados de carga con Suspense si es necesario.
  • Confundir rutas del App Router: Colocar archivos en lugares incorrectos, como fuera de app, puede romper el enrutamiento. Sigue la convención de carpetas.
  • No optimizar para Streaming SSR: Si los datos son grandes, divide la página en chunks usando Suspense para mejorar la experiencia de usuario.

Checklist de dominio

  1. Puedo crear un Server Component que obtenga datos desde una API externa.
  2. Entiendo la diferencia entre Server Components y Client Components en Next.js 15.
  3. Sé cómo estructurar rutas usando el App Router con carpetas y archivos page.js.
  4. Puedo identificar cuándo usar un Server Component vs. un Client Component basado en la interactividad.
  5. He implementado manejo de errores en peticiones asíncronas dentro de Server Components.
  6. Puedo explicar cómo los Server Components mejoran el SEO y el rendimiento inicial.
  7. Sé cómo integrar Streaming SSR para cargar contenido progresivamente.

Crear una página de perfil de usuario con Server Components

En este ejercicio, construirás una página de perfil de usuario que muestre información estática desde una API simulada, utilizando Server Components en Next.js 15. Sigue estos pasos:

  1. Crea un nuevo proyecto Next.js 15 si no tienes uno, usando npx create-next-app@latest y selecciona las opciones por defecto.
  2. Dentro de la carpeta app, crea una nueva carpeta llamada perfil.
  3. En app/perfil, crea un archivo page.js. Este será tu Server Component.
  4. En page.js, define una función asíncrona que use fetch para obtener datos de https://jsonplaceholder.typicode.com/users/1 (una API de prueba).
  5. Renderiza los datos del usuario, incluyendo nombre, email y ciudad, en una estructura HTML simple con etiquetas como h1 y p.
  6. Asegúrate de manejar posibles errores en la petición con un bloque try-catch, mostrando un mensaje de error si falla.
  7. Ejecuta el servidor de desarrollo con npm run dev y verifica que la página http://localhost:3000/perfil muestre los datos correctamente.
  8. Opcional: Agrega un Client Component para un botón de "Editar perfil" que use 'use client' y prueba la integración.
Pistas
  • Recuerda que los Server Components no pueden usar hooks de React, así que evita importar useState o useEffect.
  • Usa async/await en la función del componente para manejar la petición fetch de manera asíncrona.
  • Si la API devuelve un error, puedes mostrar un mensaje como

    Error al cargar el perfil

    en el catch.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.

Sigue con Next.js 15: Aplicaciones Full-Stack con Server Components y Streaming SSR

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.