Erstelle deine erste Astro-Island
Verwende eine Preact-Komponente, um deine Besucher:innen mit einer zufällig ausgewählten Willkommensnachricht zu begrüßen!
Mach dich bereit, …
- Preact zu deinem Astro-Projekt hinzuzufügen
- Astro-Islands (Preact-
.jsx-Komponenten) auf deiner Startseite einzubinden client:-Direktiven zu verwenden, um Islands interaktiv zu machen
Füge Preact zu deinem Astro-Projekt hinzu
Abschnitt betitelt „Füge Preact zu deinem Astro-Projekt hinzu“-
Falls dein Entwicklungsserver läuft, beende ihn, um auf das Terminal zugreifen zu können (Strg + C/Control + C).
-
Aktiviere die Unterstützung für Preact-Komponenten in deinem Astro-Projekt mit einem einzigen Befehl:
Terminal-Fenster npx astro add preactTerminal-Fenster pnpm astro add preactTerminal-Fenster yarn astro add preact -
Folge den Anweisungen in der Konsole, um das Hinzufügen von Preact zu deinem Projekt zu bestätigen.
Füge ein Preact-Begrüßungsbanner hinzu
Abschnitt betitelt „Füge ein Preact-Begrüßungsbanner hinzu“Diese Komponente nimmt ein Array mit Begrüßungen als Prop entgegen und wählt zufällig eine davon als Willkommensnachricht aus. Nutzende können auf eine Schaltfläche klicken, um eine neue zufällige Nachricht zu erhalten.
-
Erstelle im Verzeichnis
src/components/eine neue Datei mit dem NamenGreeting.jsx.Beachte die Dateiendung
.jsx. Diese Datei wird in Preact und nicht in Astro geschrieben. -
Füge folgenden Code in
Greeting.jsxein: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}! Danke für deinen Besuch!</h3><button onClick={() => setGreeting(randomMessage())}>Neue Begrüßung</button></div>);} -
Importiere und verwende diese Komponente auf deiner Startseite
index.astro.src/pages/index.astro ---import BaseLayout from '../layouts/BaseLayout.astro';import Greeting from '../components/Greeting';const pageTitle = "Startseite";---<BaseLayout pageTitle={pageTitle}><h2>Mein großartiger Blog-Untertitel</h2><Greeting messages={["Hey", "Hallo", "Moin", "Servus"]} /></BaseLayout>Sieh dir die Vorschau in deinem Browser an: Du solltest eine zufällige Begrüßung sehen – aber die Schaltfläche funktioniert noch nicht!
-
Füge eine zweite
<Greeting />-Komponente mit der Direktiveclient:loadhinzu.src/pages/index.astro ---import BaseLayout from '../layouts/BaseLayout.astro';import Greeting from '../components/Greeting';const pageTitle = "Startseite";---<BaseLayout pageTitle={pageTitle}><h2>Mein großartiger Blog-Untertitel</h2><Greeting messages={["Hey", "Hallo", "Moin", "Servus"]} /><Greeting client:load messages={["Hej", "Hallo", "Hola", "Habari"]} /></BaseLayout> -
Lade deine Seite neu und vergleiche beide Komponenten. Die zweite Schaltfläche funktioniert, weil die Direktive
client:loadAstro anweist, das JavaScript beim Laden der Seite an den Client zu senden und dort auszuführen. So wird die Komponente interaktiv. Dies nennt man eine hydrated-Komponente. -
Sobald du den Unterschied verstanden hast, entferne die nicht-hydrierte Greeting-Komponente:
src/pages/index.astro ---import BaseLayout from '../layouts/BaseLayout.astro';import Greeting from '../components/Greeting';const pageTitle = "Startseite";---<BaseLayout pageTitle={pageTitle}><h2>Mein großartiger Blog-Untertitel</h2><Greeting messages={["Hey", "Hallo", "Moin", "Servus"]} /><Greeting client:load messages={["Hej", "Hallo", "Hola", "Habari"]} /></BaseLayout>
Analysiere das Muster
Abschnitt betitelt „Analysiere das Muster“Es gibt mehrere client:-Direktiven. Jede sendet das JavaScript zu einem anderen Zeitpunkt an den Client. client:visible zum Beispiel sendet das JavaScript einer Komponente erst, wenn sie auf der Seite sichtbar wird.
Betrachte eine Astro-Komponente mit folgendem Code:
---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>-
Welche der fünf Komponenten werden hydriert, also als Astro-Islands mit JavaScript an den Client gesendet?
-
In welcher Hinsicht sind die beiden
<PreactBanner />-Komponenten gleich, und worin unterscheiden sie sich? -
Angenommen, die
SvelteCounter-Komponente zeigt eine Zahl und eine Schaltfläche, um sie zu erhöhen. Wenn du nur die veröffentlichte Seite siehst, aber nicht den Code – wie würdest du erkennen, welche der beiden<SvelteCounter />-Komponentenclient:visibleverwendet?
Teste dein Wissen
Abschnitt betitelt „Teste dein Wissen“Bei jeder der folgenden Komponenten: Was wird an den Browser gesendet?
-
<ReactCounter client:load /> -
<SvelteCard />