19.0.0 (5 décembre 2024)
Nouvelles fonctionnalités
React
- Actions :
startTransition peut désormais accepter des fonctions asynchrones. Ces fonctions sont appelées « Actions » et permettent de mettre à jour l’état en arrière-plan puis de valider l’UI en une seule fois. Les Actions peuvent exécuter des effets de bord comme des requêtes asynchrones, et la Transition attend la fin du travail avant de se terminer.
useActionState : nouveau hook permettant d’ordonner les Actions dans une Transition et d’accéder à l’état. Il accepte un état initial et un reducer.
useOptimistic : nouveau hook permettant de mettre à jour l’état pendant qu’une Transition est en cours. Une fois la Transition terminée, l’état est mis à jour avec la nouvelle valeur.
use : nouvelle API permettant de lire des ressources pendant le rendu. Elle accepte une Promise ou un Context, et si une Promise est fournie, le rendu est suspendu jusqu’à la résolution de la valeur.
- Utiliser
ref comme prop : il est désormais possible d’utiliser ref comme prop sans avoir besoin de forwardRef.
- Préchauffage des siblings Suspense : lorsqu’un composant est suspendu, React valide immédiatement le fallback de la frontière Suspense la plus proche.
Client React DOM
- Prop
action de <form> : les Form Actions gèrent automatiquement les formulaires et s’intègrent à useFormStatus. Le formulaire est automatiquement réinitialisé en cas de succès.
- Prise en charge des métadonnées du document : il est possible de rendre nativement les balises de métadonnées du document depuis les composants.
- Prise en charge des feuilles de style : insère les feuilles de style dans le
<head> du client avant de révéler le contenu d’une frontière Suspense.
- Prise en charge des scripts asynchrones : il est possible de rendre des scripts asynchrones depuis n’importe où dans l’arbre de composants.
Serveur React DOM
- Ajout des API
prerender et prerenderToNodeStream : API destinées à la génération de sites statiques, conçues pour fonctionner dans des environnements de streaming comme les flux Node.js et les flux web.
Composants serveur React
- Fonctionnalités RSC : les directives, les composants serveur et les fonctions serveur sont désormais stabilisés. Les bibliothèques incluant des composants serveur peuvent maintenant cibler React 19 comme dépendance pair.
Obsolescences prévues
- Accès à
element.ref : l’accès à element.ref est déprécié au profit de element.props.ref.
react-test-renderer : dans React 19, react-test-renderer émet un avertissement de dépréciation et bascule vers le rendu concurrent pour l’usage web.
Changements majeurs
React
- Nouvelle transformation JSX requise : la nouvelle transformation JSX est nécessaire pour améliorer la taille des bundles et permettre l’utilisation de JSX sans importer React.
- Les erreurs de rendu ne sont plus relancées : si une erreur n’est pas interceptée par un Error Boundary, elle est signalée à
window.reportError.
- Suppression de
propTypes : l’utilisation de propTypes est désormais ignorée silencieusement. Une migration vers TypeScript est recommandée.
- Suppression de
defaultProps pour les fonctions : les paramètres par défaut ES6 peuvent être utilisés à la place.
- Suppression des refs de type chaîne : l’utilisation des refs sous forme de chaînes doit être migrée vers des callbacks de ref.
React DOM
- Suppression de
react-dom/test-utils : act a été déplacé de react-dom/test-utils vers react. Les autres utilitaires ont été supprimés.
- Suppression de
ReactDOM.render, ReactDOM.hydrate : remplacés par ReactDOM.createRoot et ReactDOM.hydrateRoot pour le rendu concurrent.
Changements notables
React
- Utiliser
<Context> comme provider : il est désormais possible de rendre <Context> comme provider à la place de <Context.Provider>.
- Prise en charge des éléments personnalisés : React 19 réussit désormais tous les tests des custom elements.
- Changements dans StrictMode :
useMemo et useCallback réutilisent maintenant le résultat de mémoïsation du premier rendu.
React DOM
- Différences pour les erreurs d’hydratation : en cas de divergence, React 19 consigne une seule erreur incluant les différences du contenu non concordant.
Changements TypeScript
- Retours implicites interdits : les refs n’acceptent désormais que des fonctions de nettoyage. Les retours implicites provoquent maintenant une erreur.
- Argument initial requis pour
useRef : l’argument initial est désormais obligatoire.
- Typage plus strict de
ReactElement : les props des éléments React utilisent désormais unknown par défaut au lieu de any.
1 commentaires
Avis sur Hacker News
Certains estiment qu'il est possible et agréable de construire des applications évolutives avec React
Certains ont une opinion positive de la nouvelle version de React, tout en craignant qu'il soit difficile pour les débutants de se lancer
Certains estiment que la complexité des frameworks côté client est en augmentation
L'ajout de la fonctionnalité
ref as a propdans la nouvelle version est évalué positivement, car elle rendforwardRefinutileJotai, présenté comme un clone de Recoil, est mentionné à la place de Redux et signalé comme compatible avec React 19
Certains souhaitent un changement de nom pour l'API
useLe fait d'avoir retardé la sortie pour résoudre le problème de suspense parallèle est salué positivement
Certains se demandent s'il est possible de construire le hook
useActionStateà partir des hooks intégrés existantsL'ajout de fonctionnalités qui encouragent l'usage des technologies web standard et améliorent la qualité de vie est apprécié positivement