veilletech.fr
3 oct. Feed du jour
#05 LARAVEL Article

Inertia 3.8 : vos ID 64 bits ne sont plus arrondis

Un ID arrondi ne lève pas d'erreur. Il pointe juste ailleurs.

Inertia.js 3.8 transmet les entiers au-delà de Number.MAX_SAFE_INTEGER sans les arrondir : avec inertia-laravel 3.5.0 et l'option preserve_big_integers, ils arrivent côté client en BigInt. La version ajoute WhenMounted pour le code navigateur sous SSR, transmet enfin les callbacks d'erreur du composant Form, et ne restaure plus une page d'avant déploiement.

2 min de lectureintermédiairevidéo 1:23
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Comment s'y prendre
  3. WhenMounted, pour le code qui exige un navigateur
  4. Les correctifs qui changent un comportement
  5. À retenir

Ce qui se passe

Un entier PHP sur 64 bits, un identifiant Snowflake par exemple, part en JSON sous forme de nombre. Le navigateur le lit comme un flottant : au-delà de 2⁵³ − 1 (Number.MAX_SAFE_INTEGER), la précision manque et la valeur est arrondie sans erreur. 900719925474099988 devient 900719925474100000, et le lien construit avec mène à un autre enregistrement.

Inertia.js 3.8.0 propose d'y remédier, en option.

Comment s'y prendre

Il faut inertia-laravel 3.5.0. L'activation se fait pour toutes les réponses, avec preserve_big_integers dans config/inertia.php ou la variable INERTIA_PRESERVE_BIG_INTEGERS, ou pour une seule :

PHP
return Inertia::render('Orders/Show', [
    'id' => $order->id,
])->preserveBigIntegers();

Côté serveur, les entiers hors plage sont emballés dans un marqueur { "$bigint": "…" } ; le client les reconstitue en BigInt. Les entiers ordinaires restent des number.

JavaScript
defineProps({ id: BigInt })

Le mécanisme couvre la page initiale, les visites, les rechargements partiels, l'historique chiffré et le SSR. Renvoyé par le routeur, un formulaire ou Precognition, un BigInt repart en chaîne de chiffres, ce qu'acceptent la règle integer et $request->integer().

Attention côté front : un BigInt ne se combine pas avec un number dans une opération arithmétique, JavaScript lève une TypeError.

WhenMounted, pour le code qui exige un navigateur

Un composant qui lit window ou document au rendu fait échouer le SSR. <WhenMounted> (React, Vue, Svelte) rend son fallback côté serveur et ses enfants une fois monté dans le navigateur. Le premier rendu client reprend le fallback, ce qui évite tout écart d'hydratation.

JSX
import { WhenMounted } from '@inertiajs/react'

<WhenMounted fallback={<p>Chargement du graphique…</p>}>
  {() => <SalesChart width={window.innerWidth} />}
</WhenMounted>

En React, les enfants doivent être passés sous forme de fonction : du JSX direct serait évalué avant le rendu du composant, donc aussi côté serveur.

Les correctifs qui changent un comportement

Source : WhenMounted and BigInt Props in Inertia.js v3.8, Laravel News, 2 octobre 2026. Notes de version : inertiajs/inertia v3.8.0.