Un archivo .astro tiene siempre la misma estructura:
---import Card from '../components/Card.astro';const nombre = 'Ada';const items = ['pan', 'leche'];--- <h1>Hola, {nombre}</h1><ul> {items.map(i => <li>{i}</li>)}</ul><Card /> <style> h1 { color: rebeccapurple; }</style>HTML real con expresiones {} para inyectar valores del frontmatter. Es lo que se entrega al navegador.
Pasa el ratón por las líneas para explorar cada zona.
Lo que pongas entre los --- se ejecuta una sola vez, en el servidor o durante el build, antes de generar el HTML. Eso significa que puedes:
await fetch(...) y leer ficheros del discointerface para tus props)El cliente nunca ve este código. Es como un mini servidor encima de cada componente.
{} son tus expresionesDentro del HTML, cualquier cosa entre {} es una expresión JavaScript. Puedes meter:
{nombre}{2 + 2}{usuario.email}{nombre.toUpperCase()}El bloque <style> se aplica solo a este archivo (lo veremos en la próxima lección con detalle). Lo importante es que no necesitas CSS modules ni archivos externos para empezar.
Astro no es JSX. Algunas diferencias prácticas:
| JSX | Astro |
|---|---|
className="..." | class="..." |
htmlFor="..." | for="..." |
| Props camelCase | Atributos HTML normales |
Self-closing obligatorio (<br />) | También vale <br> |
Es HTML real con expresiones. Si dudas, escribe HTML.
En el editor tienes una página con dos huecos en el HTML que muestran { /* ... */ }. Ese /* ... */ es un comentario JS dentro de la expresión y por eso no imprime nada.
const nombre = "TuNombre"const edad = 25 (o el número que quieras){nombre} y {edad}{2025 - edad} para mostrar tu año de nacimientoEl código del frontmatter solo se ejecuta una vez al construir el sitio. Cuando un visitante reciba esta página, ya verá <h1>Hola, soy TuNombre</h1> en HTML puro.