React 19 est sorti le 5 décembre 2024. Après des mois de RC et une attente qui avait duré plus de deux ans depuis React 18, la promesse était ambitieuse : Server Actions stables, nouveau compilateur automatisant la mémoïsation, nouveau hook use(), meilleure gestion des formulaires et des transitions asynchrones. 8 mois plus tard, le retour du terrain est nuancé.
Ce qui fonctionne vraiment bien : les Server Actions
Les Server Actions (mutations serveur déclenchées depuis le client sans API REST explicite) ont convaincu la grande majorité des équipes qui les ont adoptées. La syntaxe reste surprenante au début :
// app/actions.ts
"use server";
export async function createPost(formData: FormData) {
const title = formData.get("title") as string;
await db.insert(posts).values({ title });
revalidatePath("/posts");
}
// app/new-post/page.tsx
import { createPost } from "../actions";
export default function NewPost() {
return (
<form action={createPost}>
<input name="title" />
<button type="submit">Créer</button>
</form>
);
}
Le bénéfice principal : zéro boilerplate d'API. Plus de fetch("/api/posts"), plus de route handler, plus de gestion d'état pour l'envoi. Le formulaire fonctionne même sans JavaScript côté client (progressive enhancement natif). Les retours sont positifs surtout pour les CRUD forms et les mutations simples.
Le hook use() : plus restreint qu'attendu
Le hook use() permet de consommer une Promise ou un Context directement dans le corps d'un composant, y compris dans des conditions :
function UserProfile({ userPromise }: { userPromise: Promise<User> }) {
const user = use(userPromise); // Suspend si non résolue
return <div>{user.name}</div>;
}
En pratique, son usage reste limité par rapport aux attentes. Il ne remplace pas useState + useEffect pour les fetches côté client (il faut que la Promise soit créée hors du composant pour éviter des re-créations). Les équipes qui attendaient un async/await dans les composants client ont été déçues : use() est plus un cas edge qu'un paradigme central.
Le React Compiler : pas encore universel
Le compilateur React (qui automatise useMemo et useCallback) est sorti en version stable avec React 19, mais son adoption reste prudente. Des incompatibilités avec certains patterns de code existants (mutations directes d'objets, certains usages de refs) nécessitent des ajustements avant activation. La plupart des équipes l'ont activé sur de nouveaux projets plutôt que sur les codebases existantes.
La migration : moins douloureuse que prévu
Sur ce point, les retours sont unanimement positifs. React 19 n'a pas les breaking changes spectaculaires de React 18 (qui avait introduit StrictMode double-rendu et les problèmes de useEffect). La plupart des codebases migrent sans changements majeurs. Les librairies tierces ont eu le temps de se mettre à jour. Le codemods fourni par l'équipe React couvre la majorité des cas.
- React 19 release notes — React Blog, 5 décembre 2024
- Documentation du hook use() — React Docs, 2025