Web^ID
Contact Contact

21 03

retour à la liste des articles

Inertia.js : Laravel + React = ❤

Inertia

Qu'est-ce que c'est ?

Inertia permet la conception d'application web moderne en SPA utilisant React, Vue ou Svelte en conservant la complexité métier au backend, le routing, la validation de formulaire...

I.Pourquoi ce choix

Une équipe majoritairement back

Chez Web^ID l'équipe est majoritairement constituée de développeurs backend, c'est pourquoi nous voulons garder le maximum de la complexité métier côté Laravel. Inertia nous permet de gérer l'intégralité du routing dans Laravel mais aussi la validation des formulaires.

// Hook de fomulaire qui contient les données, les erreurs de validation back ainsi que la methode pour soumettre le formulaire
const { data, post, errors } = useForm()
function submit() {
  post('/login')
}

Ce choix nous permet de nous concentrer très rapidement sur le code métier en ignorant les complexités de mise en place de projets API / front séparé. Nous préférons nous concentrer sur ce qui apporte une vraie plus-value au client : code de qualité, performance, sécurité ne sont que des exemples.

La rapidité de développement

Plusieurs points rendent le choix de Inertia très pertinent pour nos projets monolithes.

  • L'authentification des utilisateurs fonctionne exactement comme sur un projet Laravel / Blade, pas de développement supplémentaire à prévoir.
  • La gestion des droits reste la responsabilité du back avec les Middlewares
  • Le code front et back est vraiment séparé, ce qui nous impose une rigueur supplémentaire dans la qualité de notre code.
// envoi en PHP
Inertia::share('appName', config('app.name'));
// recuperation en JavaScript
const { appName } = usePage().props

Optimisé pour les tests

Intertia vient avec une méthode assertInertia() qui permet de tester que sur un endpoint les données attendues sont bien présentes et en bon nombre. Le processus de test est par conséquent assez similaire pour les développeurs back que ce qu'ils pourraient être amenés à faire avec un rendu Blade plus classique.

Voici un exemple relativement simple ou l'on teste que sur une route my-route-name nous retrouvons bien une propriété inertia introduction.title et introduction.content, que nous récupérons un tableau de 20 products et que la propriété introduction.url vaut une variable que nous souhaitons tester.

$this->get(route('my-route-name'))
            ->assertInertia(fn (AssertableInertia $page) => $page
                ->has('introduction.title')
                ->has('introduction.content')
                ->has('products', 20)
                ->where('introduction.url', $urlToCheck))

Pour en savoir plus, la documentation fournit un exemple de test assez conséquent.

Le confort pour les fronts

Nous avons fait le choix d'avoir des développeurs spécialisés dans leurs domaines. Les fronts ne font pas de back et inversement.

Mais les uns comme les autres ne sont pas prêt à faire de compromis sur la qualité de leur travail et la beauté de leur code.

Le frontend d'une application Inertia est une application React classique, les données envoyées aux vues sont réceptionnées en propriété dans les composants réactifs.

II.Pour aller plus loin

Pour l'instant, nous avons surtout utilisé Inertia pour des projets de back-office ou d'applications métier complexes. Nous n'avons pas eu la nécessité de se poser des questions SEO / SSR. Mais Inertia propose out of the box une solution SSR pour React et Vue.

Nous avons également créé une extension Chrome qui rend la visualisation des props Inertia.js rapide dans le Chrome devtools

Vous souhaitez démarrer rapidement ?
Besoin d'accompagnement ?

Vous voulez en savoir plus ou vous souhaitez nous parler de votre projet ?
Nous sommes à votre disposition !