Profile picture

Efrén Martínez

Desarrollador frontend en la ciudad de Querétaro

efrencodes

Maximiza el Poder de Astro Dominando el Arte de los slots


Actualmente estoy migrando mi portafolio a Astro, un nuevo framework para crear sitios estáticos (si otro…), y para ello utilice un concepto llamado slots, a continuación explicaré ¿Qué son los slots?


Los slots son espacios reservados dentro de un componente dónde se puede insertar contenido HTML.


Veamos un ejemplo de como crearlo y utilizarlo.


Construyendo nuestro primer slot

Primero creamos un nuevo archivo de Astro dentro de la carpeta /src/layouts llamado PrimerSlot.astro

Astro tiene una etiqueta especial <slot /> para indicarle donde queremos colocar el contenido HTML desde otro componente.


<section>

  <h1>Hola estoy en el componente padre.</h1>

	<slot /> <!-- Aqui mostrará contenido html desde otro componente  -->

<section/>

Usando nuestro primer slot

Para utilizar el componente creado, debemos crear un nuevo archivo dentro de la carpeta /src/pages llamado PaginaUtilizandoElPrimerSlot.astro e importar nuestro componente padre <PrimerSlot /> que acabamos de crear.


---
import PrimerSlot from "../layouts/PrimerSlot.astro";
---
<html lang="es">
  <head>
    <title>
			Página utilizando el primer slot
		</title>
  </head>
  <body>
    <PrimerSlot />
			<h1>Hola, aqui mostrare una lista :P </h1>
	    <ul>
					<li>Soy una lista</li>
					<li>usando slots</li>
			<ul>
    <PrimerSlot />
  </body>
</html>

Más de un slots (Named Slots)

Astro también permite utilizar más un slot, para ello debemos colocar un nombre a cada slot para poder identificarlos.


Creamos un nuevo archivo de Astro dentro de la carpeta /src/layouts llamado MultiplesSlots.astro.


Crearemos un slot para el header y footer usando named slots.


<div class="container">
  <header>

    <slot name="header" />

  </header>

  <main>

    <slot></slot>

  </main>

  <footer>

    <slot name="footer" />

  </footer>
</div>

Usando componente con múltiples slots

Debemos crear un nuevo archivo dentro de la carpeta /src/pages llamado PaginaConMultiplesSlots.astro e importar nuestro componente <MultiplesSlots /> que acabamos de crear.

Debemos usar el atributo slot para especificar el nombre del slot. Todos los demas seran insertados en el slot por default.


---
import MultiplesSlots from "../layouts/MultiplesSlots.astro";
---
<html lang="en">
  <head>
    <title>
			Página con multiples slots
		</title>
  </head>
  <body>
    <MultiplesSlots />

			<h1 slot="header">Hola, estoy usando el slot header.</h1>

			<p>Hola, estoy usando el slot por default dentro de main.</p>
			<p>Hola, yo tambien.</p>

			<p slot="footer">Hola, estoy usando el slot footer.</p>

    <MultiplesSlots />
  </body>
</html>

Conclusión

La utilización de los slots nos permite tener componentes padre con una estructura definida y dejar áreas específicas para poder tener variaciones de contenido.


Referencias