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 :
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.
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.
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
<Form>transmet enfinonHttpException,onNetworkError,onBeforeUpdateetonFlashà la visite : une 500 ou une coupure réseau ne passaient jamais par eux (#3262).- Deux mises à jour optimistes en vol : la réponse de la première, arrivée en dernier, n'annule plus la seconde à l'écran (#3245).
- Retour arrière après un déploiement : Inertia compare désormais la version des assets avant de restaurer une page, au lieu d'afficher des props périmées avec le nouveau bundle (#3264).
- SSR : les corps de requête en UTF-8 multi-octets ne sont plus corrompus (#3248).
Source : WhenMounted and BigInt Props in Inertia.js v3.8, Laravel News, 2 octobre 2026. Notes de version : inertiajs/inertia v3.8.0.