Sébastien Rigaux

Veille technologique

← Tous les liens

Hydration

Activation côté client d’interfaces rendues sur le serveur et gestion de leur cohérence.

Carte blanche sur fond bleu pâle affichant « Fixing a Hydration Mismatch Error and UI Flicker in React » et la mention « Blog ».

Dans Next.js, une valeur de localStorage peut faire diverger le HTML rendu côté serveur du premier rendu client. L’article compare les compromis : attendre le montage évite l’erreur, mais retire le contenu réel du HTML SSR ; initialiser les deux rendus avec la même valeur préserve ce contenu, au prix d’une mise à jour ultérieure pouvant provoquer un flicker.

Pour synchroniser une sidebar sans ce clignotement, un script inline applique son état au DOM avant l’hydratation et le transmet à React, qui reprend les mêmes classes. L’article distingue aussi le cas d’un contrôle de thème isolé et celui d’un backdrop mobile géré par CSS.

Giorgi MoniavaRepéré via React Digest

React combine <form action>, useActionState et useOptimistic pour gérer les retours d’attente et les mises à jour optimistes tout en conservant un envoi de formulaire avant l’exécution de JavaScript. L’article montre comment cette continuité permet d’enrichir l’interface après hydratation sans abandonner le comportement natif du navigateur.

Le point décisif est de garder l’action serveur directement dans action : une fonction cliente intermédiaire casse la soumission sans JavaScript. Pour l’optimisme, useHydrated() permet de choisir entre l’action serveur et sa version enrichie côté client.

Repéré via React Status

Visuel du billet Vinext 1.4, avec son titre, un résumé des changements et la date du 28 octobre 2026.

Vinext 1.4 réduit le travail à plusieurs étapes du rendu : les layouts App Router s’exécutent une seule fois par requête, le prefetch des routes dynamiques ne génère plus la page entière et les chunks nécessaires à l’hydratation se compilent en arrière-plan dans Chrome récent. Sur le benchmark Hacker News, l’éditeur mesure 31,1 ms de CPU par requête, contre 54,4 ms en 1.3 et 33,7 ms pour Next.js.

La version synchronise aussi la génération du HTML et du payload RSC en cache. Les résultats restent toutefois dépendants du scénario : sur un prototype de site éditorial, Next.js peint plus vite et consomme moins de CPU par requête. Le test de TanStack Redact révèle un autre compromis : moins de JavaScript téléchargé, mais une hydratation nettement plus coûteuse sur les pages chargées.

James AndersonRepéré via This week in React

Visuel TanStack Redact indiquant « Your React app. Less JavaScript. » et affichant les logos de TanStack Start, Vite, Vinext et Next.js.

TanStack Redact 0.2.0 remplace React et React DOM dans le navigateur sans modifier le code de l’application. Ses intégrations stables couvrent TanStack Start, Vite, Vinext et Next.js ; dans ces deux derniers frameworks, React reste chargé du rendu serveur tandis que Redact gère l’hydratation et le rendu client.

Les mesures fournies par TanStack montrent des réductions de bundle allant de 20,4 % à 70,5 % sur leurs applications de référence, mais ces gains varient selon le projet. Le compromis est concret : Redact rend de façon synchrone, sans time slicing ni rendu interruptible de React. Un rendu lourd peut donc retarder les interactions ; la compatibilité et les écrans les plus chargés méritent d’être vérifiés dans chaque application.

Tanner LinsleyRepéré via This week in React

Bannière blanche avec le texte noir « Next Themes » et les icônes GitHub et de sponsor.

next-themes applique le thème dès le chargement, prend en compte la préférence système et synchronise le choix entre les onglets. Son ThemeProvider fonctionne avec l’App Router comme avec pages/, et expose un hook pour changer de thème ou gérer plusieurs variantes.

Le point à intégrer dans l’architecture : le thème stocké dans le navigateur est inconnu au rendu serveur. L’interface qui dépend de useTheme doit donc attendre le montage côté client pour éviter les erreurs d’hydratation. La bibliothèque met aussi à jour l’attribut de <html> — avec suppressHydrationWarning recommandé — et reste indépendante de la solution CSS utilisée.

Illustration de l’article sur l’API browser() de React sur certificates.dev

React Canary introduit l’API browser() pour rendre un composant exclusivement dans le navigateur, sans risque de mismatch à l’hydratation ni effet de montage supplémentaire. L’article montre comment placer use(browser()) dans un composant client, entouré d’une Suspense, pour différer son rendu jusqu’à ce que les APIs du navigateur soient disponibles. Plusieurs exemples concrets illustrent l’intérêt de cette approche pour accéder à localStorage, au DOM ou à des données spécifiques à l’utilisateur, tout en évitant les contournements habituels avec useEffect ou des vérifications de l’environnement.

Aurora Scharff