Skip to main content

Was ist React?

React ist eine von Meta (früher Facebook) entwickelte und gepflegte JavaScript-Bibliothek zum Aufbau von Benutzeroberflächen. Kennzeichnend sind die deklarative UI-Beschreibung und die komponentenbasierte Architektur; React wird für kleine Widgets bis hin zu vollständigen SPAs eingesetzt. Der Kern von React ist das effiziente Re-Rendering über einen virtuellen DOM. Ändert sich der State, überträgt React nur die Differenz ins DOM – Sie müssen das DOM nicht manuell manipulieren.
Diese Seite behandelt die Kombination React 19 mit Inertia v3. Die Starterkits von Laravel 13 verwenden diese Konstellation standardmäßig.

JSX und TSX

React-Komponenten werden in JSX (JavaScript XML) geschrieben. Eine HTML-ähnliche Syntax lässt sich direkt in JavaScript einbetten.
In den Starterkits ist TypeScript (.tsx) Standard. Typdefinitionen verbessern die IDE-Vervollständigung und helfen, Bugs früh zu erkennen.
Das React-Starterkit von Laravel setzt standardmäßig auf TypeScript + TSX. Alle Beispiele auf dieser Seite sind ebenfalls in TSX geschrieben.

Rolle in Laravel

Historie

Die Beziehung zwischen React und Laravel ist etwas jünger als die zu Vue, mittlerweile aber mindestens gleichrangig. Mit Laravel 6 (2019) wurde das Auth-Scaffold in das Paket laravel/ui ausgelagert; zusammen mit Vue erschien auch ein React-Scaffold. Zu diesem Zeitpunkt dominierte Vue, und die React-Variante fristete ein Nischendasein. In Laravel Breeze (2021) wurde der Inertia + React-Stack ergänzt und damit die ernsthafte Adoption gestartet. Mit der Starterkit-Erneuerung in Laravel 12 (2025) wurde React vollständig gleichrangig zu Vue (und wird sogar zuerst angezeigt).

Aktueller Standard: Inertia × React

Der Standard-Ansatz für React in Laravel ist heute Inertia × React. Inertia ermöglicht die „moderne Monolith”-Architektur, bei der Sie ohne API-Design direkt aus dem Laravel-Controller Daten an React-Komponenten übergeben.

Setup

Via Starterkit (empfohlen)

Beim Aufsetzen eines neuen Projekts ist das Starterkit am komfortabelsten.
Wenn Sie im interaktiven Prompt React wählen, wird automatisch alles Folgende eingerichtet:
  • inertiajs/inertia-laravel (serverseitiger Adapter)
  • @inertiajs/react (Client-Adapter)
  • react + react-dom (React 19 selbst)
  • @vitejs/plugin-react (Vite-Plugin)
  • TypeScript + @types/react
  • Tailwind CSS + shadcn/ui-Komponenten
  • Middleware HandleInertiaRequests
  • Auth-Seiten für Login, Registrierung u. a. (bereits mit Inertia + React + TypeScript umgesetzt)

Manuelle Installation

Für eine Ergänzung in einem bestehenden Projekt installieren Sie Server- und Client-Seite separat.
Ergänzen Sie anschließend das React-Plugin in vite.config.ts:
Starten Sie die Inertia-App in resources/js/app.tsx:
Details zur manuellen Installation (Root-Template, Middleware-Registrierung usw.) finden Sie in der offiziellen Inertia-Dokumentation.

Verzeichnisstruktur

Im Starterkit werden React-Page-Komponenten unter resources/js/pages/ abgelegt.
Inertia::render('posts/index', [...]) verweist auf die Komponente resources/js/pages/posts/index.tsx.

Grundlagen der JSX-Syntax

React verwendet JSX. Nachfolgend die minimal notwendigen Muster, um den Code der Starterkits lesen zu können.

{} – Variablen-Interpolation

Innerhalb von JSX betten Sie JavaScript-Werte und -Ausdrücke mit {} ein.

Bedingte Darstellung – && und ternärer Operator

React hat keine Direktive wie v-if. Für einfache Bedingungen nutzen Sie den &&-Operator, für if/else den ternären Operator ? :.

Listen darstellen – .map()

Für Listen wird Array.map() verwendet. Für ein effizientes diffbasiertes Rendering ist das key-Prop erforderlich.
Entspricht v-for :key in Vue oder {#each} in Svelte.

className – CSS-Klassennamen

Da JSX zu JavaScript kompiliert wird und class ein reserviertes Wort ist, verwenden Sie für CSS-Klassen className.

Event-Handler – camelCase

Event-Attribute in JSX werden in camelCase geschrieben; Sie übergeben eine Funktionsreferenz.

Grundlagen der Page-Komponente

Eine Inertia-Page-Komponente ist eine gewöhnliche React-Komponente. Die aus dem Laravel-Controller übergebenen Daten stehen als Props zur Verfügung.

Controller

React-Page-Komponente

Sie empfangen die Props als Argument der Komponente und verwenden die vom Controller übergebenen Daten direkt. Eine REST-API muss nicht definiert werden.
Die von @inertiajs/react bereitgestellte <Link>-Komponente sorgt dafür, dass Seitenwechsel per XHR ablaufen und ein Full-Page-Reload vermieden wird.
Sie schreiben wie eine gewöhnliche <a>-Anweisung. Im Hintergrund tauscht Inertia nur die Page-Komponente aus – so entsteht das SPA-artige Gefühl.

Die Form-Komponente

Die <Form>-Komponente von @inertiajs/react ist der empfohlene Stil zum Absenden von Formularen im Starterkit. Sie geben action und method als Props an und erhalten errors und processing über eine Children-Funktion (Render-Prop).

Grundlegende Verwendung

Das Children von <Form> ist eine Funktion ({ errors, processing }) => JSX (Render-Prop-Muster). Die Form-Komponente berechnet diese Werte automatisch und übergibt sie. Formularfelder verwenden statt eines onChange-Handlers das HTML-native name-Attribut, sodass die eingebaute Formularerfassung des Browsers funktioniert.

Muster aus dem Starterkit

Die Starterkits verwalten Routen mit Wayfinder als Objekte. store.form() gibt ein Objekt mit action und method aus dem Route-Objekt zurück, das per Spread an <Form> übergeben wird.
Die in resetOnSuccess angegebenen Felder werden bei erfolgreichem Absenden automatisch zurückgesetzt. Nutzen Sie das etwa für Passwortfelder, die nach dem Absenden geleert werden sollen.
Ohne Wayfinder verhalten sich action="/login" und Co. identisch, sobald Sie die URL direkt übergeben.

Der useForm-Hook

Für die Formularverarbeitung nutzen Sie den useForm-Hook aus @inertiajs/react. State-Handling, Absenden und Anzeige von Validierungsfehlern lassen sich damit schlank umsetzen.

Auf der Controller-Seite

React-Formular-Komponente

Wichtige Eigenschaften des von useForm zurückgegebenen Objekts: Bei Validierungsfehlern behält useForm die Eingaben und zeigt die Fehler an.

Shared Data

Daten, die auf allen Seiten gemeinsam nötig sind (angemeldeter Nutzer, Flash-Messages u. a.), definieren Sie in der Methode share() der Middleware HandleInertiaRequests.
Für den Zugriff aus einer React-Komponente verwenden Sie den usePage()-Hook.
Da Shared Data in jeder Anfrage enthalten sind, sollten Sie sie auf das Nötigste beschränken. Eine Lazy-Evaluation per fn() wird nur ausgeführt, wenn die Daten tatsächlich gelesen werden.

Grundlagen der React-Hooks

Wichtige React-Hooks für die Arbeit mit Inertia × React:

useState – lokaler State

useEffect – Seiteneffekte

useMemo und useCallback – Performance-Optimierung


TypeScript-Unterstützung

Die React-Variante der Starterkits nutzt standardmäßig TypeScript. In Kombination mit den Typdefinitionen von Inertia erhalten Sie Typsicherheit für Props.

Globale Typdefinitionen

In den Starterkits werden die Typen der Shared Data in resources/js/types/index.d.ts definiert.

Verwendung der Typen in Page-Komponenten


Fazit

React entfaltet in Kombination mit Laravel – insbesondere über Inertia im Sinne eines „modernen Monolithen” – seine Stärken. Die Zusammenarbeit mit TypeScript ist ausgezeichnet, was React besonders für große Anwendungen prädestiniert. Mit Inertia × React verbinden Sie die Einfachheit des Laravel-Backends mit dem starken Ökosystem von React. Legen Sie ein Projekt mit dem Starterkit an, sind auch die Auth-Screens sofort einsatzbereit.

Offizielle Inertia.js-Dokumentation

Alle Funktionen von Inertia v3 finden Sie in der offiziellen Dokumentation.
Zuletzt geändert am 13. Juli 2026