Sintaxis de Astro
Si sabes HTML, ya sabes lo suficiente para escribir tu primer componente de Astro.
La sintaxis de componentes Astro es un superconjunto de HTML. La sintaxis fue diseñada para que resulte familiar a cualquiera que tenga experiencia escribiendo HTML o JSX, y añade soporte para incluir componentes y expresiones JavaScript.
Expresiones similares a JSX
Sección titulada Expresiones similares a JSXPuedes definir variables JavaScript locales dentro del script del componente frontmatter entre las dos separadores de código (---
) de un componente Astro. A continuación, puedes inyectar estas variables en la plantilla HTML del componente utilizando expresiones similares a JSX.
Con este enfoque, puedes incluir valores dinámicos que se calculan en el frontmatter. Pero una vez incluidos, estos valores no son reactivos y nunca cambiarán. Los componentes Astro son plantillas que sólo se ejecutan una vez, durante el paso de renderizado.
Mira a continuación más ejemplos de diferencias entre Astro y JSX.
Variables
Sección titulada VariablesLas variables locales pueden añadirse al HTML utilizando la sintaxis de llaves:
Atributos dinámicos
Sección titulada Atributos dinámicosLas variables locales pueden utilizarse entre llaves para pasar valores de atributos tanto a elementos HTML como a componentes:
Los atributos HTML se convertirán en strings, por lo que no es posible pasar funciones y objetos a elementos HTML. Por ejemplo, no se puede asignar un gestor de eventos a un elemento HTML en un componente de Astro:
En su lugar, utiliza un script del lado del cliente para añadir el gestor de eventos, como lo harías en JavaScript convencional:
HTML Dinamico
Sección titulada HTML DinamicoLas variables locales pueden utilizarse en funciones similares a JSX para producir elementos HTML generados dinámicamente:
Astro puede mostrar HTML condicionalmente utilizando operadores lógicos JSX y expresiones ternarias.
Etiquetas dinámicas
Sección titulada Etiquetas dinámicasTambién puedes utilizar etiquetas dinámicas asignando un nombre de etiqueta HTML a una variable o reasignando la importación de un componente:
Al utilizar etiquetas dinámicas:
-
Los nombres de las variables deben ir en mayúsculas. Por ejemplo, usa
Elemento
, noelemento
. De lo contrario, Astro intentará representar el nombre de la variable como una etiqueta HTML literal. -
No se admiten directivas de hidratación. Cuando se usan las directivas
client:*
de hidratación, Astro necesita saber qué componentes empaquetar para producción, y el patrón de etiquetas dinámicas impide que esto funcione. -
La directiva define:vars no está soportada. Si no puedes envolver los hijos con un elemento adicional (por ejemplo,
<div>
), entonces puedes añadir manualmente unstyle={`--myVar:${value}`}
a tu Elemento.
Fragmentos
Sección titulada FragmentosAstro admite el uso de <Fragment> </Fragment>
o la forma abreviada <> </>
.
Los fragments pueden ser útiles para evitar elementos envolventes al agregar directivas set:*
, como en el siguiente ejemplo:
Diferencias entre Astro y JSX
Sección titulada Diferencias entre Astro y JSXLa sintaxis de los componentes de Astro es un superconjunto de HTML. Se ha diseñado para que resulte familiar a cualquier persona con experiencia en HTML o JSX, pero hay un par de diferencias clave entre los archivos .astro
y JSX.
Atributos
Sección titulada AtributosEn Astro, se utiliza el formato estándar kebab-case
para todos los atributos HTML en lugar del camelCase
utilizado en JSX. Esto funciona incluso para class
, que no está soportado por React.
Elementos múltiples
Sección titulada Elementos múltiplesUna plantilla de componente en Astro puede renderizar múltiples elementos sin necesidad de envolver todo en un solo <div>
o <>
, a diferencia de JavaScript o JSX.
Comentarios
Sección titulada ComentariosEn Astro, puedes utilizar comentarios HTML estándar o comentarios de estilo JavaScript.
Los comentarios HTML se incluirán en el DOM del navegador, mientras que los JS se omitirán. Para dejar mensajes TODO u otras explicaciones exclusivas de desarrollo, es posible que desees utilizar comentarios de estilo JavaScript en su lugar.