Construa sua primeira ilha Astro
Utilize um componente Preact para saudar seus visitantes com uma mensagem randomicamente selecionada!
Se prepare para...
- Adicionar Preact ao seu projeto Astro
- Incluir ilhas Astro (componentes Preact .jsx) em sua página inicial
- Utilizar diretivas client:para fazer ilhas interativas
Adicione Preact ao seu projeto Astro
- 
Se ele estiver executando, feche o servidor de desenvolvimento para ter acesso ao terminal (atalho de teclado: Ctrl + C). 
- 
Adicione a habilidade de utilizar componentes Preact em seu projeto Astro com um único comando: Terminal window npx astro add preact
- 
Siga as instruções da linha de comando para confirmar a adição do Preact ao seu projeto. 
Inclua um banner de saudação com Preact
Esse componente irá receber um array de mensagens de saudação como uma prop e randomicamente selecionar uma delas para mostrar uma mensagem de boas-vindas. O usuário pode clicar em um botão para conseguir uma nova mensagem randômica.
- 
Crie um novo arquivo em src/components/chamadoSaudacao.jsxNote a extensão de arquivo .jsx. Este arquivo será escrito em Preact, não Astro.
- 
Adicione o seguinte código para Saudacao.jsx:src/components/Saudacao.jsx import { useState } from 'preact/hooks';export default function Saudacao({mensagens}) {const mensagemAleatoria = () => mensagens[(Math.floor(Math.random() * mensagens.length))];const [saudacao, setSaudacao] = useState(mensagens[0]);return (<div><h3>{saudacao}! Obrigado por visitar!</h3><button onClick={() => setSaudacao(mensagemAleatoria())}>Nova Saudação</button></div>);}
- 
Importe e utilize esse componente em sua página inicial index.astro.src/pages/index.astro ---import LayoutBase from '../layouts/LayoutBase.astro';import Saudacao from '../components/Saudacao.jsx';const tituloPagina = "Página Inicial";---<LayoutBase tituloPagina={tituloPagina}><h2>O subtítulo incrível do meu blog</h2><Saudacao mensagens={["Oi", "Olá", "Coé", "E aí"]} /></LayoutBase>Verifique a pré-visualização no seu navegador: você deve ver uma saudação aleatória, mas o botão não irá funcionar! 
- 
Adicione um segundo componente <Saudacao />com a diretivaclient:load.src/pages/index.astro ---import LayoutBase from '../layouts/LayoutBase.astro';import Saudacao from '../components/Saudacao';const tituloPagina = "Página Inicial";---<LayoutBase tituloPagina={tituloPagina}><h2>O subtítulo incrível do meu blog</h2><Saudacao mensagens={["Oi", "Olá", "Coé", "E aí"]} /><Saudacao client:load mensagens={["Hej", "Hallo", "Hola", "Habari"]} /></LayoutBase>
- 
Revisite sua página e compare os dois componentes. O segundo botão funciona pois a diretiva client:loaddiz ao Astro para enviar e executar novamente o JavaScript no cliente quando a página carrega, fazendo o componente interativo. Isso é chamado componente hidratado.
- 
Quando a diferença ficar clara, remova o componente Saudação não-hidratado. src/pages/index.astro ---import LayoutBase from '../layouts/LayoutBase.astro';import Saudacao from '../components/Saudacao';const tituloPagina = "Página Inicial";---<LayoutBase tituloPagina={tituloPagina}><h2>O subtítulo incrível do meu blog</h2><Saudacao mensagens={["Oi", "Olá", "Coé", "E aí"]} /><Saudacao client:load mensagens={["Hej", "Hallo", "Hola", "Habari"]} /></LayoutBase>
Analise o Padrão
Há outras diretivas client: para explorar. Cada uma envia JavaScript ao cliente em momentos diferentes. client:visible, por exemplo, irá apenas enviar o JavaScript do componente quando ele é visível na página.
Considere um componente Astro com o seguinte código:
---import LayoutBase from '../layouts/LayoutBase.astro';import BannerAstro from '../components/BannerAstro.astro';import BannerPreact from '../components/BannerPreact';import ContadorSvelte from '../components/ContadorSvelte.svelte';---<LayoutBase>  <BannerAstro />  <BannerPreact />  <BannerPreact client:load />  <ContadorSvelte />  <ContadorSvelte client:visible /></LayoutBase>- 
Quais dos cinco componentes serão ilhas hidratadas, enviando JavaScript ao cliente? 
- 
De que forma(s) os dois componentes <BannerPreact />serão o mesmo? De que forma(s) eles serão diferentes?
- 
Assuma que o componente ContadorSveltemostra um número e tem um botão para aumentá-lo. Se você não pudesse ver o código do seu website, apenas a página publicada ao vivo, como você diria qual dos dois componentes<ContadorSvelte />usaramclient:visible?
Teste seu conhecimento
Para cada um dos seguintes componentes, identifique o que será enviado ao navegador:
- 
<ContadorReact client:load/>
- 
<CartaoSvelte />