No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Enrutamiento: rutas dinámicas

16/25
Recursos

Aportes 2

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

¿No te quedo del todo claro como funcionan las rutas dinamicas?

Prepare un ejemplo usando Pokemons🦖 y sin colecciones para hacerlo más fácil de comprender.
Te dejo los docs ➡️ https://docs.astro.build/en/core-concepts/routing/

 
Para el ejemplo tenemos el archivo [pokemon].astro dentro del directorio pokemon y este dentro de nuestro directorio pages.

📂pages
		📂pokemon
			📄[pokemon].astro ← Aquí

En este archivo usamos [pokemon] para determinar que pokemon será un parametro dinamico. Esto significa que la función getStaticPaths() dentro de este archivo deberá incluir el atributo pokemon dentro de sus params.
 
Ej: ://localhost/pokemon/[el_nombre_del_pokemon]
 

El archivo [pokemon].astro contiene lo siguiente:

---
export async function getStaticPaths() {
  return [ // Debe siempre retornar una lista
    {params: {pokemon: 'bulbasaur'}, props: {type:'planta'}}, // Usando props (opcional)
    {params: {pokemon: 'charmander'}, props: {type:'fuego'}},
    {params: {pokemon: 'squirtle'}, props: {type:'agua'}},
    {params: {pokemon: 'caterpie'}, props: {type:'insecto'}},
    {params: {pokemon: 'pidgey'}, props: {type:'vuelo'}}
  ];
}

const { pokemon } = Astro.params; // Recibimos el pokemon (solo puede ser uno de los listados en el return de la función getStaticPaths)
const { type } = Astro.props; // Recibimos los props (estamos recibiendo props.type pero para acortarlo usamod {type})
---

<h1 class="text-center p-4 bg-red-400 text-white font-bold">
	Tu {pokemon} es tipo {type}
</h1>

(borra los comentarios que hize si vas a copiar y pegar este código en tu editor)
 

 
🔥 La función getStaticPaths() debe siempre retornar un array. 🔥
 
Si intentamos acceder a un pokemon no declarado directamente obtendremos un error ya que debido a que usamos SSG (por defecto en Astro) solo los declarados en el array dentro de la función getStaticPaths serán renderizados.

El parámetro [...slug] se conoce como Parámetro Rest, y ayuda a darle flexibilidad al enrutamiento en Astro. En el archivo [...slug].astro, que se renderiza de forma dinámica, siempre se debe devolver en la sección de JavaScript un objeto con las siguientes claves:

export async function getStaticPaths() {
/*
.
.
*/
return {
      params: { slug },
      props: { title, text }, <------ Aqui pueden ir todas las props que necesites
    };
}
//Fijense que aquí ya puedo sacar las props que retorna la función anterior.
const { title, text } = Astro.props;

Si estoy usando archivos Markdown, usaría el componente <Content /> como lo hizo el profesor en la clase. Si estoy usando archivos en HTML, podría usarlo de esta forma:

<html>
  <head>
    <title>{title}</title>
  </head>
  <body>
    <h1>{title}</h1>
    <p>{text}</p>
  </body>
</html>