dev-tourBUG-002RESOLVED

Erreur

Créé 23/05/2026 23:52:31 · MAJ 23/05/2026 23:58:27 · 2 images

Regardes les captures

001-img-3975.png

002-img-3976.png

Diagnostic

Deux erreurs distinctes dans la console iOS :

  1. Console Error : "Encountered a script tag while rendering React component" → causé par <script dangerouslySetInnerHTML={{ __html: themeInitScript }} /> dans app/layout.tsx. React 19 / Next 16 ne tolèrent plus les <script> inline rendus dans l'arbre Server Component.
  2. Recoverable Error — Hydration failed : diff visible <span className="ml-2 norma...">. Cause : stats.totalNodes.toLocaleString() (sans locale explicite) dans components/home/home-debug.tsx. La locale par défaut diffère entre Node (en-US → 4,925) et navigateur (fr → 4 925).

Les 2 erreurs ensemble cassaient l'hydratation → useEffect ne se déclenchait jamais → hydrated restait false → home figée sur "Chargement…" jusqu'au refresh (où le bug d'inline script peut se résoudre tout seul par cache).

Fix

  1. Script inline déplacé dans public/theme-init.js, référencé via <script src="/theme-init.js" />. Sort de l'arbre React → plus de warning.
  2. toLocaleString() remplacé par un formatter déterministe String(n).replace(/\B(?=(\d{3})+(?!\d))/g, " ") qui produit exactement le même output côté serveur et navigateur, indépendamment de la locale.

Vérifications

  • npx tsc --noEmit : 0 erreur
  • SSR HTML : plus aucun dangerouslySetInnerHTML ni localStorage.getItem
  • /theme-init.js servi en application/javascript (557 bytes)
  • SSR rend 931 fichiers · 4 925 liens avec espace normal — identique au client

À tester côté user

Hard refresh (Ctrl+Shift+R / Cmd+Shift+R). Console devrait être propre. La page Home doit s'afficher direct, sans "Chargement…" même en navigation privée.

Chemin disque : /home/debian/superApp_V1/bugs/dev-tour/BUG-002-erreur/