Componentes en Astro
Es el momento de trabajar de forma más profunda los componentes de Astro.
⚡️Este es el capítulo más importante del bootcamp.
Si conoces otros frameworks orientados a web verás muchas similitudes.
Si es la primera vez que ves algo así, estás de suerte, porque Astro lo hace MUY fácil.
👀 El Layout que vimos en pasos anteriores es también un componente.
🔍 Un componente es una unidad mínima de funcionalidad reutilizable. Una aplicación web es una unión de varios de estos componentes.
Componente estático ¶
Aprovechemos el fragmento de código donde estamos colocando la foto, el título y la descripción.
Crea la nueva carpeta /src/components y un nuevo fichero dentro Hero.astro.
Ahora cambia el index.astro y sustituye todo el contenido por el componente Hero.
👀 El componente funciona de forma similar a una etiqueta HTML. Como todavía no tenemos ningún elemento hijo (pronto sí, ya verás) la etiqueta puede abrirse y cerrarse con / en la misma etiqueta.
Añadimos props para hacerlo dinámico ¶
Es claro que si queremos reutilizar el componente hay que dotarle de “vida”.
Usemos de nuevo los props para pasar atributos desde el padre (index.astro) al componente.
⚡️Gracias al Atro.props podemos definir atributos variables. Hemos alterado el componente para que permita modificar título, la URL de la imagen y el enlace y texto del botón.
👀 Importante: Cuando el prop está entre etiquetas usamos la notación {buttonText} y cuando es el valor para un atributo hacemos lo mismo, pero eliminamos las comillas: href={buttonLink}
Ahora ajustemos el lugar donde llamamos al componente para asignarle los parámetros adecuados.
💪 Primer componente dinámico funcionando
Buenas prácticas: Tipos y valores ¶
Vamos a añadir aquí un concepto de TypeScript.
🎧 Podcast: WR 257: TypeScript puede ser tu lenguaje para SIEMPRE
😱 No te asustes, es solo para sacarle partido a la potencia de Astro y su uso interno del lenguaje TypeScript para dar más poder y control al developer… ¡a ti!
Al inicio del componente Hero añadimos esto:
👀 El interface Props es una declaración de variables y tipos. Astro a partir de este momento controlará que los 4 props que hemos definido tengan el tipo de string (cadena de texto) y que sean obligatorios.
Si alguno de los props fuera un número podríamos utilizar number en vez de string. Pero, por ahora, tranquilo, no es esencial profundizar en esto.
💦 Vete a index.astro y en la inserción del componente <Hero> prueba a eliminar algún atributo como por ejemplo title.
💪 ¿Ves lo que pasa? Aparece en rojo y te indica que hay un error. Eso es gracias al interface.
💣 Si te encuentras con algunos problemas debidos a TypeScript puedes reducir los requisitos que tiene que cumplir tu código cambiando el contenido del fichero tsconfig.json en tu carpeta raíz.
Props opcionales ¶
Acabamos añadiendo una opción más a nuestro interface Props. La capacidad de que alguno de nuestros props sean opcionales.
👀 Añadiendo un ? TypeScript y, por tanto Astro, entienden que esos dos props son ahora opcionales.
🔍 Dejamos para un poco más adelante cómo sacar partido a esos props opciones, lo haremos cuando veamos la sintaxis JSX.
💦 ¿Te animas a reutilizar el componente Hero en about.astro? Es muy fácil. Recuerda importar el componente en la parte encerrada entre las tres líneas ---.
💪 Componentes listos, o casi ;)
⚡️ Pon a prueba lo que has aprendido
Este contenido llega a ti gracias a la Comunidad de suscriptores de Web Reactiva