Framework-Komponenten
Erstelle deine Astro-Website, ohne dein favorisiertes Komponenten-Framework aufzugeben.
Astro unterstützt eine Vielzahl von beliebten Frameworks wie React, Preact, Svelte, Vue, SolidJS, AlpineJS und Lit.
Integrationen installieren
Astro kommt mit optionalen Integrationen für React, Preact, Svelte, Vue, SolidJS, AlpineJS und Lit. Beliebig viele dieser Astro-Integrationen können in deinem Projekt installiert und konfiguriert werden.
Um Astro für die Verwendung dieser Frameworks zu konfigurieren, installiere zunächst die Integration mit ihren Abhängigkeiten:
Importiere anschließend ihre Funktion und füge sie deiner Liste von Integrationen in astro.config.mjs
hinzu:
⚙️ Sieh dir den Integrationsleitfaden an, um mehr Details zum Installieren und Konfigurieren von Astro-Integrationen zu erfahren.
⚙️ Möchtest du ein Beispiel für ein Framework deiner Wahl sehen? Besuche astro.new und wähle eine Framework-Vorlage.
Framework-Komponenten nutzen
Nutze deine JavaScript-Framework-Komponenten in deinen Astro-Seiten, -Layouts und -Komponenten genauso wie deine Astro-Komponenten. Du kannst alle deine Komponenten zusammen in /src/components
unterbringen oder sie auf eine andere Weise organisieren, die dir gefällt.
Um eine Framework-Komponente zu nutzen, importiere sie relativ in deine Astro-Komponente. Anschließend kannst du die Komponente neben anderen Komponenten, HTML-Elementen und JSX-ähnlichen Ausdrücken in der Komponentenvorlage verwenden.
Standardmäßig werden die Framework-Komponenten als statisches HTML gerendert. Dies ist hilfreich für Template-Komponenten, die nicht interaktiv sind. Dadurch wird verhindert, dass unnötiges JavaScript an den Client gesendet wird.
Interaktive Komponenten hydratisieren
Eine Framework-Komponente kann interaktiv gemacht (hydratisiert) werden, indem eine der client:*
-Direktiven (EN) verwendet wird. Es handelt sich dabei um Komponenten-Attribute, die festlegen, wann der JavaScript-Code der Komponente an den Browser gesendet werden soll.
Bei allen Client-Direktiven außer client:only
wird deine Komponente zuerst auf dem Server gerendert, um statisches HTML zu erzeugen. Der JavaScript-Code der Komponente wird entsprechend der Direktive deiner Wahl an den Browser gesendet. Die Komponente wird dann hydratisiert und wird interaktiv.
Das zum Rendern der Komponente benötigte JavaScript-Framework (React, Svelte etc.) wird gemeinsam mit dem Komponenten-JavaScript an den Browser gesendet. Falls zwei oder mehr Komponenten auf einer Seite dasselbe Framework nutzen, wird das Framework nur einmal gesendet.
Die meisten Framework-spezifischen Patterns für Barrierefreiheit sollten genauso funktionieren, wenn sie in Astro verwendet werden. Vergewissere dich, dass du eine client-Direktive verwendest, die sicherstellt, dass das JavaScript für die Barrierefreiheit korrekt geladen und zur richtigen Zeit ausgeführt wird!
Verfügbare Hydratisierungs-Direktiven
Es sind einige Hydratisierungs-Direktiven für UI-Framework-Komponenten verfügbar: client:load
, client:idle
, client:visible
, client:media={QUERY}
und client:only={FRAMEWORK}
.
📚 Sieh dir unsere Direktiven-Referenz (EN) für eine vollständige Beschreibung der Direktiven und deren Nutzung an.
Frameworks mischen
Du kannst Komponenten aus verschiedenen Frameworks in dieselbe Astro-Komponente importieren und dort rendern.
Nur Astro-Komponenten (.astro
) können Komponenten von verschiedenen Frameworks enthalten.
Props an Framework-Komponenten durchreichen
Du kannst Props von Astro-Komponenten an Framework-Komponenten durchreichen:
Du kannst eine Funktion als Prop an eine Framework-Komponente durchreichen, jedoch funktioniert dies nur mit serverseitigen Rendering. Versuchst du eine Funktion in einer hydratisierten Komponente zu nutzen (z.B. als Event-Handler), wird ein Fehler auftreten.
Das liegt daran, dass Funktionen von Astro nicht serialisiert (vom Server zum Client übertragen) werden können.
Kinder an Framework-Komponenten durchreichen
Innerhalb einer Astro-Komponente kannst du Kinder an die Framework-Komponenten durchreichen. Jedes Framework hat dabei seine eigene Vorgehensweise, wie die Kinder referenziert werden sollen: React, Preact und Solid nutzen eine spezielle children
-Prop, wohingegen Svelte und Vue ein <slot />
-Element nutzen.
Zusätzlich kannst du Benannte Slots verwenden, um spezifische Kinder zu gruppieren.
Für React, Preact und Solid werden die Slots in Eigenschaften auf oberster Ebene konvertiert. Slot-Namen in kebab-case
werden in camelCase
konvertiert.
In Svelte und Vue können diese Slots durch ein <slot>
-Element mit name
-Attribut referenziert werden. Slot-Namen in kebab-case
bleiben erhalten.
Framework-Komponenten verschachteln
Innerhalb einer Astro-Datei können Framework-Komponenten ebenfalls hydratisierte Komponenten sein. Das bedeutet, dass du rekursiv Komponenten von beliebigen dieser Frameworks ineinander verschachteln kannst.
Beachte: Innerhalb von Framework-Komponenten-Dateien selbst (z.B. .jsx
, .svelte
) kannst du keine Frameworks mischen.
Dies erlaubt es dir, gesamte “Anwendungen” mit deinem bevorzugten JavaScript-Framework zu bauen und sie durch eine Eltern-Komponente zu einer Astro-Seite zu rendern.
Astro-Komponenten werden immer als statisches HTML gerendet, sogar wenn sie hydratisierte Framework-Komponenten enthalten. Das bedeutet, dass du nur Props übergeben kannst, die kein HTML-Rendering verursachen. Es ist z.B. nicht möglich, Reacts “Render Props” aus einer Astro-Komponente heraus an Framework-Komponenten zu übergeben, da Astro-Komponenten nicht das clientseitige Laufzeitverhalten zur Verfügung stellen, welches dafür benötigt wird. Nutze stattdessen Benannte Slots.
Kann ich Astro-Komponenten innerhalb meiner Framework-Komponenten verwenden?
Jede UI-Framework-Komponente wird zu einer “Astro-Insel” dieses Frameworks. Solche Komponenten müssen komplett in Code geschrieben werden, der für das jeweilige Framework gültig ist, und können nur ihre eigenen Importe und Pakete verwenden. Du kannst keine .astro
-Komponenten in eine UI-Framework-Komponente (z.B. .jsx
oder .svelte
) importieren.
Du kannst allerdings das Astro-<slot />
-Muster innerhalb einer .astro
-Komponente verwenden, um statische Inhalte, die von Astro-Komponenten erzeugt wurden, als Kinder an deine Framework-Komponenten zu übergeben.
Kann ich Astro-Komponenten hydratisieren?
Wenn du versuchst, eine Astro-Komponente mit einer client:
-Direktive zu hydratisieren, wirst du einen Fehler erhalten.
Astro-Komponenten sind reine HTML-Komponenten ohne clientseitigen Laufzeit-Code. Jedoch kannst du ein <script>
-Tag innerhalb der Komponentenvorlage deiner Astro-Komponente verwenden, um JavaScript-Code an den Browser zu senden, der auf globaler Ebene ausgeführt werden soll.
📚 Erfahre mehr über das clientseitige <script>
-Tag in Astro-Komponenten