Sintaxis JSX en Astro
Astro entiende la sintaxis JSX popularizada sobre todo por React.js. En la parte del HTML del componente podremos usar esta forma de escribir código para poder hacer condicionales, loops o jugar con las variables.
🤖 Esto es lo que sabe de JSX el ChatGPT
⚡️Eso no quiere decir que haga falta crear componentes de React (aunque Astro permita esas integraciones), solo es que entiende esa sintaxis.
🎧 Podcast: WR 241: Preguntas y respuestas sobre React
Ejemplo de JSX como condicional ¶
Vamos a retomar el Hero.astro
para comprender la sintaxis más útil.
💦 A mi me costó un poco entenderlo, así que tómatelo con paciencia.
En ese componente teníamos un botón con un texto y un enlace que eran opcionales, pero aún así, se pintaban.
Vamos a controlar con un condicional ese comportamiento:
Justo debajo de <slot />
cambia el código por este:
👀 Si buttonText
está asignada, entonces si mostramos el enlace. Incluso podríamos añadir la condición buttonText && buttonLink
para hacerlo más poderoso.
Ejemplo de loop con JSX ¶
En el componente Projects.astro
nos quedábamos solo con un proyecto, pero queremos mostrar por lo menos los 5 últimos.
En vez de crear nuestro propio array de proyectos vamos a usar un par de trucos con JavaScript y JSX: slice
y map
Ahora vamos a modificar todo el componente:
⚡️ Recuerda cambiar webreactiva-devs
por tu usuario.
👀 Explicamos el código con detalle aquí:
- Define una lista HTML usando la clase
list-group
. - Dentro de esta lista, el código utiliza una expresión JavaScript entre llaves
{}
. En Astro y otros marcos similares, las expresiones entre llaves permiten incorporar JavaScript directamente en el HTML. projects.slice(0,5).map((project) => { ... })
es una expresión de JavaScript que recorre los primeros 5 elementos del arrayprojects
. Para cada proyecto, el método.map()
genera un nuevo elemento de la lista.- Dentro de la función
.map()
, se devuelve un elemento de la lista HTML usando la sintaxis de JSX. El atributohref
de este enlace es la URL del repositorio del proyecto en Github. - Dentro del enlace, se incluye el componente
GithubIcon
y undiv
que contiene el nombre del proyecto y su descripción.
💣 Si tienes problemas con map((project) =>
puede ser debido a tu configuración local de TypeScript. En el paso de componentes vimos como cambiar la configuración, aunque también puedes cambiarlo por map((roject: any) => p
💪 Ya tienes la web prácticamente al completo, ¡hurra por ti!
⚡️ Pon a prueba lo que has aprendido
Este contenido llega a ti gracias a la Comunidad de suscriptores de Web Reactiva