Componentes de Frameworks
Construa seu website Astro sem sacrificar o seu framework de componentes favorito.
Astro suporta uma variedade de frameworks populares incluindo React, Preact, Svelte, Vue, SolidJS, AlpineJS e Lit.
Instalando Integrações
Seção intitulada Instalando IntegraçõesAstro vem com integrações opcionais para React, Preact, Svelte, Vue, SolidJS, AlpineJS e Lit. Uma ou várias destas integrações Astro podem ser instaladas e configuradas em seu projeto.
⚙️ Veja o Guia de Integrações para mais detalhes em como instalar e configurar integrações Astro.
⚙️ Quer ver um exemplo do framework de sua escolha? Visite astro.new e selecione um dos templates de frameworks.
Usando Componentes de Frameworks
Seção intitulada Usando Componentes de FrameworksUtilize os componentes de frameworks JavaScript em suas páginas, layouts e componentes Astro assim como você utilizaria componentes Astro! Todos os seus componentes podem estar juntos em /src/components
, ou podem ser organizados da forma que você preferir.
Para usar um componente de framework, importe-o de seu caminho relativo no script do componente Astro. Então, use o componente ao lado de outros componentes, como elementos HTML e expressões estilo JSX no template do componente.
Por padrão, seus componentes de frameworks serão renderizados apenas no servidor, como HTML estático. Isso é útil para fazer o template de componentes que não são interativos e evita mandar qualquer JavaScript desnecessário ao cliente.
Hidratando Componentes Interativos
Seção intitulada Hidratando Componentes InterativosUm componente de framework pode se tornar interativo (hidratado) utilizando uma diretiva client:*
. Elas são atributos de componente que determinam quando o JavaScript do seu componente deve ser enviado ao navegador.
Com todas as diretivas de cliente exceto client:only
, seu componente será primeiro renderizado no servidor para gerar HTML estático. JavaScript do componente será enviado ao navegador de acordo com a diretiva que você escolheu. O componente será então hidratado e se tornará interativo.
O framework JavaScript (React, Svelte, etc) necessário para renderizar o componente será enviado ao navegador junto do JavaScript do próprio componente. Se dois ou mais componentes em uma página usam o mesmo framework, o framework será enviado apenas uma vez.
A maioria dos padrões de acessibilidade específicos de frameworks devem funcionar da mesma forma ao serem utilizados no Astro. Certifique-se de utilizar uma diretiva de cliente que irá garantir que qualquer JavaScript relacionado à acessibilidade seja propriamente carregado e executado na hora certa!
Diretivas de Hidratação Disponível
Seção intitulada Diretivas de Hidratação DisponívelHá diversas diretivas de hidratação disponíveis para componentes de frameworks de UI: client:load
, client:idle
, client:visible
, client:media={QUERY}
e client:only={FRAMEWORK}
.
📚 Veja nossa página de referência de diretivas para uma descrição completa destas diretivas de hidratação e seus usos.
Misturando Frameworks
Seção intitulada Misturando FrameworksVocê pode importar e renderizar componentes de múltiplos frameworks em um mesmo componente Astro.
Apenas componentes Astro (.astro
) podem conter componentes de múltiplos frameworks.
Passando Props Para Componentes de Frameworks
Seção intitulada Passando Props Para Componentes de FrameworksVocê pode passar props de componentes Astro para componentes de frameworks:
Você pode passar uma função como prop para um componente de framework, mas ela apenas funciona durante renderização no servidor. Se você tentar utilizar a função em um componente hidratado (por exemplo, como um event handler), um erro irá ocorrer.
Isso acontece pois funções não podem ser serializadas (transferidas do servidor para o cliente) pelo Astro.
Passando Filhos para Componentes de Frameworks
Seção intitulada Passando Filhos para Componentes de FrameworksDentro de um componente Astro, você pode passar filhos para componentes de frameworks. Cada framework tem seus próprios padrões para como se referenciar a esses filhos: React, Preact, e Solid usam todos uma prop especial chamada children
, enquanto Svelte e Vue usam o elemento <slot />
.
Adicionalmente, você pode usar Slots Nomeados para agrupar filhos específicos juntos.
Para React, Preact, e Solid esses slots serão convertidos em uma prop top-level. Nomes de slots usandokebab-case
serão convertidos para camelCase
.
Para Svelte e Vue esses slots podem ser referenciados utilizando um elemento <slot>
com o atributo name
. Nomes de slots usando kebab-case
serão preservados.
Aninhando Componentes de Frameworks
Seção intitulada Aninhando Componentes de FrameworksDentro de um arquivo Astro, filhos de componentes de frameworks também podem ser componentes hidratados. Isso significa que você pode recursivamente aninhar componentes de qualquer um desses frameworks.
Lembre-se: os próprios arquivos dos componentes de frameworks (e.x. .jsx
, .svelte
) não podem misturar múltiplos frameworks.
Isso te permite construir “aplicativos” inteiros com seu framework JavaScript favorito e o renderizar, via um componente parente, em uma página Astro.
Componentes Astro sempre são renderizados como HTML estático, até mesmo quando incluem componentes de frameworks que são hidratados. Isso significa que você só pode passar props que não renderizam nenhum HTML. Passar “render props” do React para componentes de frameworks a partir de um componente Astro não irá funcionar, pois componentes Astro não podem providenciar o comportamento em runtime do cliente que esse padrão precisa. No lugar, use slots nomeados.
Posso utilizar Componentes Astro dentro de meus Componentes de Frameworks?
Seção intitulada Posso utilizar Componentes Astro dentro de meus Componentes de Frameworks?Qualquer componente de framework de UI se torna uma “ilha” daquele framework. Esses componentes precisam ser escritos inteiramente como código válido para aquele framework, usando apenas suas importações e pacotes. Você não pode importar componentes .astro
em um componente de framework de UI (e.x. .jsx
ou .svelte
).
Você pode, no entanto, utilizar o padrão de <slot />
do Astro para passar conteúdo gerado estaticamente por componentes Astro como filhos de seus componentes de frameworks dentro de um componente .astro
.
Posso utilizar Componentes Astro dentro de meus Componentes de Framework?
Seção intitulada Posso utilizar Componentes Astro dentro de meus Componentes de Framework?Qualquer componente de framework UI se torna uma “ilha” daquele framework. Esses componentes devem ser escritos inteiramente como código válido para o framework, usando apenas suas próprias importações e pacotes. Você não pode importar componentes .astro
em um componente de framework UI (e.x. .jsx
ou .svelte
).
Você pode, porém, utilizar o padrão <slot />
do Astro para passar conteúdo estático gerado por componentes Astro como filhos de seus componentes de framework dentro de um componente .astro
.
Posso Hidratar Componentes Astro?
Seção intitulada Posso Hidratar Componentes Astro?Se você tentar hidratar um componente Astro com um modificador client:
, você receberá um erro.
Componentes Astro são componentes de template de apenas HTML que não possuem runtime no lado do cliente. Porém, você pode usar uma tag <script>
no template do seu componente Astro para enviar JavaScript ao navegador que é executado no escopo global.
📚 Aprenda mais sobre <scripts>
no lado do cliente em componentes Astro.