CodeAventura
Astro
▸Datos y contenido▸Rutas dinámicas

Misión

●iniciando…
Astro
Preparando entorno

Esto solo ocurre la primera vez que abres el curso.

13 / 22Rutas dinámicas
Anterior

Rutas dinámicas

El problema: muchas páginas con la misma forma

Imagina un blog con 50 posts. ¿Vas a crear 50 archivos .astro a mano? Por supuesto que no. La solución son las rutas dinámicas: una sola plantilla que se "instancia" para cada parámetro.

Archivos con corchetes

Cuando un nombre de archivo contiene un nombre entre corchetes, Astro lo interpreta como un parámetro:

El nombre dentro de [ ] se convierte en una clave que tu archivo puede leer.

En SSG: getStaticPaths

En modo estático (el por defecto), Astro necesita saber qué páginas concretas generar. Para eso, exportas una función getStaticPaths:

Astro generará tres páginas: /posts/1, /posts/2 y /posts/3.

Generar paths a partir de datos

En la práctica, los paths suelen venir de un fetch o de una colección de contenido:

El campo props es una vía cómoda para evitar volver a buscar los datos del post dentro del template.

En SSR: el parámetro llega en runtime

Si tu sitio es server-rendered (output: "server"), no necesitas getStaticPaths. Cada petición trae sus propios Astro.params:

(Cuidado en SSR con paths inválidos: tendrás que devolver un 404 manualmente si la API no encuentra el recurso.)

Catch-all: [...resto]

Para capturar varios segmentos a la vez:

/docs/getting-started/install → Astro.params.path === "getting-started/install". Útil para docs anidados.

Tu desafío 🚀

Tienes src/pages/posts/[id].astro casi vacío. Tu trabajo:

  1. Exporta una función getStaticPaths() que devuelva un array con los IDs "1", "2" y "3". Cada elemento del array tiene la forma { params: { id: "1" } }.
  2. Lee el id desde Astro.params (const { id } = Astro.params).
  3. Imprime el id dentro del <h1>.

Si todo va bien, tendrás tres páginas accesibles: /posts/1, /posts/2 y /posts/3. Cambiando el array cambias las páginas que se generan, sin tocar el template.