React 19.3 est sorti le 9 septembre 2026. La plupart des articles de sortie ressemblent à une liste de fonctionnalités ; je les lis comme une liste de code que je peux supprimer. Par rapport à React 18, encore présent dans beaucoup d’applications en production, la série 19 concerne moins la nouvelle syntaxe que l’abandon des contournements réécrits par chaque équipe : machines à états pour les formulaires, wrappers autour de forwardRef, memo partout et vérifications typeof window.
React 19.0 a posé les bases. Actions et useActionState ont remplacé le trio artisanal isPending / error / data dans chaque formulaire. useOptimistic a transformé l’interface optimiste en hook plutôt qu’en reducer. use() lit une promesse ou un contexte pendant le rendu, même sous condition. ref est devenu une prop normale : forwardRef appartient donc au passé ; <Context> peut lui-même servir de provider ; <title> et <meta> remontent dans head depuis n’importe quel composant. Le prix du changement était réel : les refs de type chaîne, l’ancien Context, ReactDOM.render et propTypes sur les composants fonctionnels ont disparu. Une application React 18 avec de vieilles dépendances doit donc réellement migrer, pas simplement changer de numéro de version.
React 19.2 et React Compiler 1.0 ont changé le ressenti du développement. <Activity mode="hidden"> garde un onglet ou la page suivante montée avec son état, tout en mettant ses effets en pause — l’équivalent de ce qu’on simulait avant avec display: none et un peu d’espoir. useEffectEvent met fin au conflit avec la règle exhaustive-deps : l’effet réagit à roomId, tandis que le callback lit simplement le thème le plus récent. Le pré-rendu partiel (prerender, puis resume) permet d’envoyer une coquille statique depuis le CDN pendant que la partie dynamique arrive en streaming. Le Compiler a également rendu inutiles la plupart des appels manuels à useMemo, useCallback et React.memo. Je les garde lorsqu’une bibliothèque exige une identité référentielle, mais ils ne sont plus un réflexe.
React 19.3 concerne les transitions et les limites du DOM. <ViewTransition> est désormais stable : on enveloppe un élément, on marque la mise à jour avec startTransition, et le navigateur anime les entrées, sorties et éléments partagés. addTransitionType permet à « next » et « previous » de glisser dans des directions différentes à partir de la même mise à jour d’état. Les refs de Fragment donnent accès à focus(), observeUsing() pour IntersectionObserver et aux mesures d’un groupe d’éléments frères sans div enveloppant. use(browser()) de react-dom remplace le test typeof window !== "undefined" : le composant suspend côté serveur, affiche le fallback Suspense puis se rend sur le client après l’hydratation. Les Server Components peuvent rendre <Context value> directement, sans fichier provider « use client » ; react-dom transmet aussi les objets Trusted Types sans les convertir en chaînes, ce qui permet d’utiliser React avec une CSP stricte et require-trusted-types-for.
La comparaison côte à côte se voit dans les imports. Avec React 18, un formulaire avec état d’attente, mise à jour optimiste et liste animée exigeait trois bibliothèques et un hook maison ; dans 19.3, useActionState, useOptimistic et <ViewTransition> viennent de React lui-même. Dans 18, « rendre uniquement côté client » voulait dire un indicateur mounted et un décalage de mise en page ; désormais, une ligne et une frontière Suspense suffisent. La performance exigeait une discipline memo ; le Compiler et React Performance Tracks dans Chrome DevTools montrent maintenant ce qui a réellement bloqué une frame.
Je ne passerais pas de 18 à 19.3 en un seul pull request sur un produit qui traite de l’argent. Ma méthode est volontairement prudente : d’abord 18.3 pour faire apparaître les avertissements de dépréciation, ensuite 19 avec les codemods officiels, puis le Compiler derrière un flag sur une route, et enfin les nouvelles API uniquement là où elles suppriment du code. 19.3 est lui-même additif : l’annonce ne répertorie aucune rupture. Mais les avis de sécurité sur Server Components publiés en décembre 2025 rappellent que les versions correctives comptent autant que les versions majeures. Si votre application utilise encore 18, envoyez-moi package.json et vos trois écrans les plus importants. Je vous répondrai avec l’ordre de migration et le code qu’elle permettra de supprimer.
Donnez à votre prochain produit quelqu’un qui reste.
Prêt à commencer ? Écrivez-moi — je peux démarrer immédiatement et rester dans la durée. Des collaborations à long terme, pas une passation après deux semaines. Discutons de votre projet, de vos exigences et de la meilleure façon d’avancer.