Construye tu primera Astro island
Usa un componente de Preact para saludar a tus visitantes con un mensaje de bienvenida seleccionado aleatoriamente.
Prepárate para…
- Añade Preact a tu proyecto de Astro
- Incluye Astro islands (componentes Preact
.jsx) en tu página principal - Usa directivas
client:para hacer las islands interactivas
Añade Preact a tu proyecto de Astro
Sección titulada “Añade Preact a tu proyecto de Astro”-
Si está corriendo, detén el dev server para tener acceso a la terminal (atajo de teclado: Ctrl + C).
-
Añade la capacidad de usar componentes de Preact en tu proyecto de Astro con un solo comando:
Ventana de la terminal npx astro add preactVentana de la terminal pnpm astro add preactVentana de la terminal yarn astro add preact -
Sigue las instrucciones de la línea de comandos para confirmar la adición de Preact a tu proyecto.
Incluye un banner de saludo de Preact
Sección titulada “Incluye un banner de saludo de Preact”Este componente tomará un array de mensajes de saludo como prop y seleccionará aleatoriamente uno de ellos para mostrar como mensaje de bienvenida. El usuario puede hacer clic en un botón para obtener un nuevo mensaje aleatorio.
-
Crea un nuevo archivo en
src/components/llamadoGreeting.jsxNota la extensión de archivo
.jsx. Este archivo será escrito en Preact, no en Astro. -
Añade el siguiente código a
Greeting.jsx:src/components/Greeting.jsx import { useState } from 'preact/hooks';export default function Greeting({messages}) {const randomMessage = () => messages[(Math.floor(Math.random() * messages.length))];const [greeting, setGreeting] = useState(messages[0]);return (<div><h3>{greeting}! Thank you for visiting!</h3><button onClick={() => setGreeting(randomMessage())}>New Greeting</button></div>);} -
Importa y usa este componente en tu página Home
index.astro.src/pages/index.astro ---import BaseLayout from '../layouts/BaseLayout.astro';import Greeting from '../components/Greeting';const pageTitle = "Home Page";---<BaseLayout pageTitle={pageTitle}><h2>My awesome blog subtitle</h2><Greeting messages={["Hi", "Hello", "Howdy", "Hey there"]} /></BaseLayout>Revisa la vista previa en tu navegador: deberías ver un saludo aleatorio, ¡pero el botón no funcionará!
-
Añade un segundo componente
<Greeting />con la directivaclient:load.src/pages/index.astro ---import BaseLayout from '../layouts/BaseLayout.astro';import Greeting from '../components/Greeting';const pageTitle = "Home Page";---<BaseLayout pageTitle={pageTitle}><h2>My awesome blog subtitle</h2><Greeting messages={["Hi", "Hello", "Howdy", "Hey there"]} /><Greeting client:load messages={["Hej", "Hallo", "Hola", "Habari"]} /></BaseLayout> -
Revisa tu página de nuevo y compara los dos componentes. El segundo botón funciona porque la directiva
client:loadle dice a Astro que envíe y reejecute su JavaScript en el cliente cuando la página se carga, haciendo el componente interactivo. Esto se llama un componente hidratado. -
Una vez que la diferencia sea clara, elimina el componente Greeting no hidratado.
src/pages/index.astro ---import BaseLayout from '../layouts/BaseLayout.astro';import Greeting from '../components/Greeting';const pageTitle = "Home Page";---<BaseLayout pageTitle={pageTitle}><h2>My awesome blog subtitle</h2><Greeting messages={["Hi", "Hello", "Howdy", "Hey there"]} /><Greeting client:load messages={["Hej", "Hallo", "Hola", "Habari"]} /></BaseLayout>
Analiza el Patrón
Sección titulada “Analiza el Patrón”Hay otras directivas client: para explorar. Cada una envía el JavaScript al cliente en un momento diferente. client:visible, por ejemplo, solo enviará el JavaScript del componente cuando es visible en la página.
Considera un componente de Astro con el siguiente código:
---import BaseLayout from '../layouts/BaseLayout.astro';import AstroBanner from '../components/AstroBanner.astro';import PreactBanner from '../components/PreactBanner';import SvelteCounter from '../components/SvelteCounter.svelte';---<BaseLayout> <AstroBanner /> <PreactBanner /> <PreactBanner client:load /> <SvelteCounter /> <SvelteCounter client:visible /></BaseLayout>-
¿Cuáles de los cinco componentes serán islands hidratadas, enviando JavaScript al cliente?
-
¿De qué manera(s) serán iguales los dos componentes
<PreactBanner />? ¿De qué manera(s) serán diferentes? -
Asume que el componente
SvelteCountermuestra un número y tiene un botón para incrementarlo. Si no pudieras ver el código de tu sitio web, solo la página publicada en vivo, ¿cómo sabrías cuál de los dos componentes<SvelteCounter />usóclient:visible?
Pon a prueba tu conocimiento
Sección titulada “Pon a prueba tu conocimiento”Para cada uno de los siguientes componentes, identifica qué será enviado al navegador:
-
<ReactCounter client:load /> -
<SvelteCard />