Einstiegs-Guide zur Verwendung von React mit Laravel + Inertia.js. Historischer Hintergrund von laravel/ui bis zu den aktuellen Starterkits sowie praxisnahe Erläuterung der Inertia-React-Hooks wie useForm und usePage.
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.
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).
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.
// resources/js/pages/posts/index.tsximport { Link } from '@inertiajs/react'type Post = { id: number title: string created_at: string}type Props = { posts: { data: Post[] // paginate(10) liefert ein Objekt mit Pagination-Infos // current_page, last_page, per_page, total sind ebenfalls verfügbar }}export default function PostsIndex({ posts }: Props) { return ( <div> <h1>Beitragsübersicht</h1> {posts.data.map((post) => ( <article key={post.id}> <h2> <Link href={`/posts/${post.id}`}>{post.title}</Link> </h2> <p>{post.created_at}</p> </article> ))} </div> )}
Sie empfangen die Props als Argument der Komponente und verwenden die vom Controller übergebenen Daten direkt. Eine REST-API muss nicht definiert werden.
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).
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.
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.
import { Form } from '@inertiajs/react'import { store } from '@/routes/login'export default function Login() { return ( <Form {...store.form()} resetOnSuccess={['password']} className="flex flex-col gap-6" > {({ errors, processing }) => ( <> {/* Formularinhalt */} </> )} </Form> )}
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.
Für die Formularverarbeitung nutzen Sie den useForm-Hook aus @inertiajs/react. State-Handling, Absenden und Anzeige von Validierungsfehlern lassen sich damit schlank umsetzen.
Daten, die auf allen Seiten gemeinsam nötig sind (angemeldeter Nutzer, Flash-Messages u. a.), definieren Sie in der Methode share() der Middleware HandleInertiaRequests.
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.
Die React-Variante der Starterkits nutzt standardmäßig TypeScript. In Kombination mit den Typdefinitionen von Inertia erhalten Sie Typsicherheit für Props.
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.
Baustein
Rolle
Laravel-Controller
Routing, Datenerfassung, Validierung
Inertia::render()
Daten vom Controller an die React-Komponente reichen
React-Page-Komponente
Props empfangen und UI rendern
useForm
Formular-State, Absenden und Fehleranzeige
Link-Komponente
Seitenwechsel ohne Full-Reload
usePage().props
Zugriff auf Shared Data
TypeScript
Typsicherheit der Props und bessere IDE-Autocompletion
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.