Sintaxe do Astro
Se você conhece HTML, você já sabe o suficiente para escrever seu primeiro componente Astro.
A sintaxe de componente Astro é uma extensão do HTML. A sintaxe foi projetada para soar familiar a qualquer um com experiência em escrever HTML ou JSX e adiciona suporte para incluir componentes e expressões do JavaScript.
Expressões parecidas com JSX
Você pode definir variáveis locais do JavaScript dentro do script do frontmatter do componente entre as duas cercas de código (---
) de um componente Astro. Você pode então injetar essas variáveis no template HTML do componente usando expressões parecidas com JSX!
Usando essa abordagem, você pode incluir valores dinâmicos que são calculados no frontmatter. Mas uma vez incluídos, esses valores não são reativos e nunca mudarão. Os componentes Astro são templates que só executam uma vez, durante a etapa de renderização.
Veja abaixo mais exemplos de diferenças entre Astro e JSX.
Variáveis
Variáveis locais podem ser adicionadas ao HTML usando a sintaxe de chaves:
Atributos Dinâmicos
Variáveis locais podem ser usadas entre chaves para passar valores de atributos tanto para elementos HTML como para componentes:
Atributos HTML vão ser convertidos para strings, portanto não é possível passar funções e objetos para elementos HTML. Por exemplo, você não pode atribuir um manipulador de eventos a um elemento HTML em um componente Astro:
Ao invés disso, use um script do lado do cliente para adicionar o manipulador de evento, como você faria no JavaScript vanilla:
HTML Dinâmico
Variáveis locais podem ser usadas em funções parecidas com JSX para produzir elementos HTML gerados dinamicamente:
O Astro pode condicionalmente exibir HTML usando operadores lógicos do JSX e expressões ternárias.
Tags Dinâmicas
Você também pode usar tags dinâmicas ao atribuir a uma variável o nome de uma tag HTML ou um componente importado:
Ao usar tags dinâmicas:
-
Os nomes de variáveis precisam ser capitalizados. Por exemplo, use
Elemento
, nãoelemento
. Caso contrário, o Astro vai tentar renderizar o nome da sua variável como uma tag HTML literal. -
Diretivas de hidratação não são suportadas. Ao usar as diretivas de hidratação
client:*
, o Astro precisa saber quais componentes devem fazer parte do bundle para produção, e o padrão de tags dinâmicas impede que isso funcione.
Fragmentos
O Astro suporta usar tanto <Fragment></Fragment>
como a abreviação <></>
.
Fragmentos podem ser úteis para evitar ter que colocar um elemento em volta ao adicionar diretivas set:*
, como no exemplo a seguir:
Diferenças entre Astro e JSX
A sintaxe de componente Astro é um superconjunto do HTML. Ela foi projetada para soar familiar a qualquer um com experiência com HTML ou JSX, mas existem algumas diferenças importantes entre arquivos .astro
e o JSX.
Atributos
No Astro, você usa o formato padrão kebab-case
para todos os atributos HTML em vez do camelCase
usado no JSX. Isso funciona até para o class
, que não é suportado pelo React.
Múltiplos elementos
O template de um componente do Astro pode renderizar vários elementos sem a necessidade de envolver tudo em uma única <div>
ou <>
, diferente do JavaScript ou JSX.
Comentários
No Astro, você pode usar comentários HTML padrão ou comentários no estilo JavaScript.
Os comentários no estilo do HTML serão incluídos no DOM do navegador, enquanto os do JS serão ignorados. Para deixar mensagens TODO ou outras explicações somente para desenvolvimento, você pode querer usar comentários no estilo JavaScript ao invés disso.