Skip to main content

Wat is React

React is een JavaScript-library voor het bouwen van gebruikersinterfaces, ontwikkeld en onderhouden door Meta (voorheen Facebook). Kenmerkend zijn de declaratieve UI-beschrijving en de componentgebaseerde architectuur; React wordt breed ingezet, van kleine widgets tot volledige SPA’s. De kern van React is efficiënt herrenderen via de virtual DOM. Wanneer de state verandert, past React alleen de verschillen toe op de DOM, zodat je de DOM nooit handmatig hoeft te manipuleren.
Deze pagina behandelt de combinatie van React 19 en Inertia v3. De starter kits van Laravel 13 gebruiken deze opzet standaard.

JSX en TSX

React-componenten schrijf je in de syntaxis JSX (JavaScript XML). Je schrijft HTML-achtige notatie direct in JavaScript.
In de starter kits is TypeScript (.tsx) de standaard. Dankzij typedefinities wordt de IDE-autocompletion sterker en vind je bugs eerder.
De React starter kit van Laravel gebruikt standaard TypeScript + TSX. Alle voorbeelden op deze pagina zijn daarom in TSX geschreven.

De positie binnen Laravel

Geschiedenis

De relatie tussen React en Laravel is iets korter dan die met Vue, maar inmiddels wordt React gelijkwaardig of zelfs prominenter behandeld. Bij Laravel 6 (2019) werd de authenticatiescaffolding afgesplitst naar de package laravel/ui, en werd naast Vue ook een React-versie van de scaffold aangeboden. In die tijd was Vue echter dominant en had de React-versie weinig zichtbaarheid. Met de toevoeging van de Inertia + React-stack aan Laravel Breeze (2021) begon de serieuze adoptie, en bij de vernieuwing van de starter kits in Laravel 12 (2025) kwam React volledig op gelijke voet met Vue te staan (het wordt zelfs als eerste getoond).

De huidige mainstream: Inertia × React

De belangrijkste manier om React in Laravel te gebruiken is tegenwoordig Inertia × React. Inertia realiseert een “moderne monoliet”-architectuur waarbij je zonder een API te ontwerpen data rechtstreeks vanuit Laravel-controllers aan React-componenten doorgeeft.

Setup

Via een starter kit (aanbevolen)

Voor een nieuw project is een starter kit de makkelijkste route.
Kies je in de interactieve prompt voor React, dan wordt dit allemaal automatisch opgezet:
  • inertiajs/inertia-laravel (server-side adapter)
  • @inertiajs/react (clientadapter)
  • react + react-dom (React 19 zelf)
  • @vitejs/plugin-react (Vite-plugin)
  • TypeScript + @types/react
  • Tailwind CSS + de shadcn/ui-componentlibrary
  • De middleware HandleInertiaRequests
  • Authenticatieschermen zoals inloggen en registreren (al geïmplementeerd met Inertia + React + TypeScript)

Handmatige installatie

Voeg je Inertia toe aan een bestaand project, dan installeer je de server- en clientzijde afzonderlijk.
Voeg vervolgens de React-plugin toe aan vite.config.ts.
Start de Inertia-app in resources/js/app.tsx.
Zie de officiële Inertia-documentatie voor de details van een handmatige installatie (zoals het instellen van de roottemplate en het registreren van de middleware).

Directorystructuur

In de starter kits plaats je React-paginacomponenten in de directory resources/js/pages/.
Schrijf je Inertia::render('posts/index', [...]), dan is resources/js/pages/posts/index.tsx de bijbehorende component.

De basis van de JSX-syntaxis

React gebruikt JSX: een stijl waarbij je HTML-achtige syntaxis in JavaScript schrijft. Hier zijn de patronen die je minimaal moet kennen om de code van de starter kits te kunnen lezen.

{} — variabelen invoegen

Binnen JSX gebruik je {} om JavaScript-waarden of -expressies in te voegen.

Voorwaarden — && en de ternaire operator

React kent geen directive zoals v-if. Voor eenvoudige voorwaarden gebruik je de &&-operator, voor if/else de ternaire operator ? :.

Lijsten renderen — .map()

Voor het renderen van lijsten gebruik je Array.map(). Geef altijd de prop key op voor efficiënte diff-updates.
Dit komt overeen met v-for :key in Vue of {#each} in Svelte.

className — CSS-klassenamen

Omdat JSX naar JavaScript wordt gecompileerd, is class een gereserveerd woord. Voor CSS-klassen gebruik je className.

Eventhandlers — camelCase

Eventattributen in JSX zijn in camelCase en krijgen een functiereferentie.

De basis van paginacomponenten

Een Inertia-paginacomponent is een gewone React-component. De data die je vanuit de Laravel-controller doorgeeft, ontvang je als props.

Controller

React-paginacomponent

Je ontvangt de props simpelweg als argument van de component en kunt de data uit de controller direct gebruiken. Een REST API definiëren is niet nodig.
Met de <Link>-component van @inertiajs/react verlopen paginanavigaties via XHR, zodat een volledige browserreload wordt vermeden.
Je schrijft hem net als een gewone <a>-tag, maar op de achtergrond vervangt Inertia alleen de paginacomponent, waardoor het aanvoelt als een SPA.

De Form-component

De <Form>-component van @inertiajs/react is de aanbevolen stijl voor formulierverzending die in de authenticatieschermen van de starter kits wordt gebruikt. Je geeft action en method op als props en ontvangt errors en processing via een children-functie (render prop).

Basisgebruik

De children van <Form> is een functie ({ errors, processing }) => JSX (het render-prop-patroon). De Form-component berekent deze waarden automatisch en geeft ze door. Voor de formuliervelden gebruik je geen onChange-handler maar het native HTML-attribuut name, zodat de standaard formulierdataverzameling van de browser werkt.

Het patroon van de starter kits

De starter kits gebruiken Wayfinder om routes als objecten te beheren. store.form() geeft een object terug met de action en method van het routeobject, dat je in <Form> spreadt.
Velden die je opgeeft in resetOnSuccess worden bij een geslaagde verzending automatisch gereset. Gebruik dit voor velden die je na het verzenden leeg wilt maken, zoals wachtwoordvelden.
Gebruik je Wayfinder niet, dan werkt het net zo goed als je direct een URL doorgeeft, zoals action="/login".

De useForm-hook

Voor formulierverwerking gebruik je de useForm-hook van @inertiajs/react. Statebeheer van het formulier, verzenden en het tonen van validatiefouten implementeer je hiermee eenvoudig.

Aan de controllerkant

React-formuliercomponent

De belangrijkste properties van het object dat useForm teruggeeft: Komt er een validatiefout terug, dan toont useForm de fouten terwijl de ingevoerde inhoud behouden blijft.

Gedeelde data (shared data)

Data die je op elke pagina nodig hebt (zoals de ingelogde gebruiker en flashberichten) definieer je in de methode share() van de middleware HandleInertiaRequests.
Om vanuit een React-component bij de gedeelde data te komen, gebruik je de usePage()-hook.
Gedeelde data wordt bij elke request meegestuurd; beperk deze daarom tot het strikt noodzakelijke. Gebruik je lazy evaluation met fn(), dan wordt de data alleen geëvalueerd wanneer er daadwerkelijk toegang toe is.

De basis van React-hooks

Hier zijn de fundamentele React-hooks die je moet kennen om met Inertia × React te ontwikkelen.

useState — lokaal statebeheer

useEffect — side effects verwerken

useMemo en useCallback — prestatieoptimalisatie


TypeScript-ondersteuning

De React-versie van de starter kit gebruikt standaard TypeScript. In combinatie met de typedefinities van Inertia waarborg je de typeveiligheid van je props.

Globale typedefinities

In de starter kits definieer je de types van gedeelde data in resources/js/types/index.d.ts.

Types gebruiken in paginacomponenten


Samenvatting

React komt in combinatie met Laravel vooral tot zijn recht in de “moderne monoliet”-opzet via Inertia. De uitstekende samenwerking met TypeScript maakt het geschikt voor de ontwikkeling van grootschalige applicaties. Met Inertia × React krijg je een ontwikkelervaring die de eenvoud van een Laravel-backend combineert met het krachtige ecosysteem van React. Maak je een project aan met de starter kit, dan kun je direct beginnen met ontwikkelen, inclusief authenticatieschermen.

Officiële Inertia.js-documentatie

Raadpleeg de officiële documentatie voor alle functies van Inertia v3.
Laatst gewijzigd op 6 september 2026