Zum Inhalt springen
Workflow

React-Komponenten in Astro einsetzen

Astro rendert React-Komponenten direkt. Wie du die Integration einrichtest, welche client-Direktive wann passt und warum animierte Bausteine JavaScript im Browser brauchen.

7 Min. LesezeitStand: 17. August 2026
AstroReactWorkflow
astro add react01
Serie 04
Licht, das den ganzen Tag bleibt
Sechs Leuchten aus einer Werkstatt in Utrecht.
Serie ansehenShowroom

Astro baut Seiten standardmäßig ohne JavaScript. Trotzdem kannst du React-Komponenten mitten in eine .astro-Datei setzen: Astro rendert sie und schickt nur dort Code an den Browser, wo du es erlaubst. Für animierte Bausteine ist genau diese Erlaubnis der entscheidende Schritt.

Das Wichtigste in Kürze
  • Die Komponenten müssen nicht umgeschrieben werden. Astro rendert React über eine offizielle Integration mit.
  • Ohne client-Direktive kommt die Komponente als reines HTML an, und die Animation läuft nicht.
  • client:visible ist für Sections unter dem ersten Bildschirm meist die richtige Wahl, client:load für den Hero.
  • Astro und React teilen sich dasselbe Tailwind-Setup. Es braucht keine zweite Konfiguration.
01

Warum das ohne Portierung geht

Astro ist kein eigenes Komponenten-Format, sondern ein Seiten-Framework, das fremde Komponenten aufnimmt. Über sogenannte Integrationen kann es React, Vue, Svelte und andere rendern, auch nebeneinander in derselben Seite.

Für die Library heißt das: Der kopierte TSX-Code bleibt Zeile für Zeile derselbe. Du legst ihn in dein Astro-Projekt und bindest ihn ein. Es gibt keine Astro-Fassung der Komponenten, weil es keine braucht.

02

Einrichten

Ein Befehl richtet die React-Integration ein und trägt sie in die Konfiguration ein. Danach kommen die drei Pakete dazu, die die Komponenten selbst brauchen.

  npx astro add reactnpm install framer-motion lucide-react   npx astro add tailwind
Einmal pro Projekt. Die letzte Zeile nur, wenn Tailwind noch fehlt.
Tailwind gilt für beideAstro und React teilen sich dieselbe Tailwind-Konfiguration. Die Klassen im kopierten Code funktionieren sofort, ohne zweites Setup.
03

Die Komponente einbinden

Die kopierte Datei landet zum Beispiel unter src/components. In der .astro-Seite importierst du sie wie in React und setzt sie in den Markup-Teil.

Der entscheidende Zusatz ist die client-Direktive. Ohne sie rendert Astro die Komponente einmal zu HTML und schickt kein JavaScript mit. Die Seite sieht dann richtig aus, aber nichts bewegt sich, kein Hover reagiert und kein Zustand wechselt.

---import Layout from "../layouts/Layout.astro";import Hero from "../components/ProcurementSplitHero";--- <Layout>  <Hero client:load /></Layout>
src/pages/index.astro
Ohne client-Direktive
  • Astro rendert einmal zu HTML.
  • Kein JavaScript geht an den Browser.
  • Die Section sieht richtig aus.
  • Nichts bewegt sich, kein Hover reagiert.
Mit client-Direktive
  • Astro rendert das HTML wie vorher.
  • Der Code der Komponente kommt dazu.
  • Die Section sieht genauso aus.
  • Animation, Hover und Zustand laufen.
Der häufigste FehlerEine vergessene client-Direktive sieht nicht nach einem Fehler aus. Die Komponente steht da, nur eben still. Wenn eine Animation nicht läuft, ist das die erste Stelle zum Nachsehen.
04

Welche client-Direktive wann

Astro kennt mehrere Direktiven. Sie entscheiden, wann der Browser den Code der Komponente lädt und ausführt. Für die Bausteine der Library sind drei davon interessant.

  1. client:load Lädt sofort. Richtig für alles, was direkt sichtbar ist: der Hero, eine Navigation, ein Knopf über dem Falz.
  2. client:visible Lädt erst, wenn der Abschnitt in die Nähe des Bildschirms scrollt. Die beste Wahl für alle Sections weiter unten, gerade bei Scroll-Animationen: Sie sollen ohnehin erst dort anspringen.
  3. client:idle Lädt, sobald der Browser Luft hat. Passt für Nebensächliches, das nicht sofort da sein muss, etwa einen Newsletter-Block im Footer.

Als Faustregel: der erste Bildschirm bekommt client:load, alles darunter client:visible. Damit bleibt die Startlast klein, und trotzdem läuft jede Animation, sobald man sie sieht.

Heroclient:load · sofort
Sectionsclient:visible · beim Scrollen
Footerohne Direktive · kein JavaScript
Was bei einem Aufruf tatsächlich an den Browser geht. Der Footer ohne Direktive kostet nichts.

Ohne Direktive: kein JavaScript, keine Bewegung. Mit der falschen: Bewegung, die zu früh oder zu spät startet.

05

Bilder und Schriften

Die Komponenten binden Bilder als einfache Adresse ein, nicht über einen Bild-Import. Damit funktionieren sie in Astro genauso wie überall sonst: Datei nach public legen, Pfad im Code anpassen, fertig.

Wer Astros eigene Bildoptimierung nutzen will, ersetzt das img-Element in der kopierten Komponente durch das Image-Element aus astro:assets. Das geht allerdings nur in .astro-Dateien, nicht innerhalb der React-Komponente. In dem Fall gibt man das fertige Bild als Property hinein.

---import { Image } from "astro:assets";import bild from "../assets/hero.jpg";---   <Hero client:load bild={bild.src} />
Astros Bildoptimierung geht nur in .astro-Dateien.
06

Mehrere Komponenten auf einer Seite

Jede React-Komponente mit client-Direktive ist eine eigene Insel. Sie bringt ihren eigenen Code mit und weiß nichts von den Nachbarn. Für die Bausteine der Library ist das kein Problem, weil sie ohnehin eigenständig sind und keinen gemeinsamen Zustand teilen.

framer-motion wird dabei nur einmal geladen, auch wenn zehn Inseln es nutzen. Der Bundler erkennt die gemeinsame Abhängigkeit.

Per MCP geht es auch hierDer MCP-Zugang liefert denselben TSX-Code an deinen Editor. Sag dazu, dass es ein Astro-Projekt ist, dann setzt der Assistent die client-Direktive gleich mit.
Teilen
Geschrieben von
Amelie RoesmannCreative DirectionLeonie RoesmannDesign Engineering

Wir bauen Websites und Web-Apps bei Systra Studios in Münster und legen die Bausteine daraus hier ab. Was in den Beiträgen steht, kommt aus echten Projekten, nicht aus einem Werbeprospekt.

Systra Studios: Webdesign aus Münster

Der Aufbau steht.
Jetzt fehlen nur noch die Bausteine.

Derselbe TSX-Code, den du in ein React-Projekt legst, läuft in Astro als Insel. Kopieren, client-Direktive setzen, fertig.

  • Keine Astro-Fassung nötig, der Code bleibt Zeile für Zeile derselbe.
  • framer-motion wird einmal geladen, auch bei zehn Inseln.
  • Tailwind gilt für .astro und .tsx gleichzeitig.
Sections ansehen
FAQ

Häufige Fragen

Nein. Astro rendert React-Komponenten über die offizielle Integration mit. Der kopierte Code bleibt unverändert, es kommt nur die client-Direktive an der Einbindung dazu.

Deine Frage war nicht dabei? Wir helfen gern weiter.

Kontakt aufnehmen