Se rendre au contenu

React 19 est sorti

Actions et Server Components
5 décembre 2024 par
React 19 est sorti
Makersquad

Date de sortie : 5 décembre 2024

Documentation officielle : React 19

React 19 simplifie les patterns qu’on implémentait à la main depuis des années. Les Actions gèrent le pending/error/success des formulaires. useOptimistic rend l’UI optimiste triviale. Et forwardRef ? C’est de l’histoire ancienne — ref est maintenant une prop comme les autres.



Les nouveautés principales

Actions — formulaires simplifiés

Les Actions gèrent automatiquement les états pending, erreurs et mises à jour optimistes :

function UpdateName() {
  const [error, submitAction, isPending] = useActionState(
    async (previousState, formData) => {
      const error = await updateName(formData.get("name"));
      if (error) return error;
      redirect("/profile");
    },
    null
  );

  return (
    <form action={submitAction}>
      <input name="name" />
      <button disabled={isPending}>Update</button>
      {error && <p>{error}</p>}
    </form>
  );
}


useOptimistic — UI optimiste

Mettre à jour l’UI immédiatement pendant qu’une action est en cours :

function LikeButton({ initialLikes }) {
  const [likes, setLikes] = useState(initialLikes);
  const [optimisticLikes, addOptimisticLike] = useOptimistic(likes);

  async function handleLike() {
    addOptimisticLike(likes + 1);
    await sendLike();
    setLikes(likes + 1);
  }

  return <button onClick={handleLike}>{optimisticLikes} ❤️</button>;
}


L’API use() — lire des ressources

Lire des promesses et du contexte directement dans le rendu :

function Comments({ commentsPromise }) {
  // Suspend jusqu'à résolution
  const comments = use(commentsPromise);
  return comments.map(c => <Comment key={c.id} {...c} />);
}

// Peut être appelé conditionnellement !
function Theme({ showTheme }) {
  if (showTheme) {
    const theme = use(ThemeContext);
    return <div style={{ color: theme.color }}>...</div>;
  }
  return null;
}


ref en tant que prop

Plus besoin de forwardRef :

// Avant
const Input = forwardRef((props, ref) => (
  <input ref={ref} {...props} />
));

// Après
function Input({ ref, ...props }) {
  return <input ref={ref} {...props} />;
}


Server Components (stable)

Les composants serveur sont maintenant stables :

// Ce composant s'exécute sur le serveur
async function BlogPost({ id }) {
  const post = await db.posts.get(id);
  return (
    <article>
      <h1>{post.title}</h1>
      <Content html={post.content} />
    </article>
  );
}


Métadonnées document natives

Gérer <title>, <meta>, <link> directement dans les composants :

function BlogPost({ post }) {
  return (
    <>
      <title>{post.title}</title>
      <meta name="description" content={post.summary} />
      <article>...</article>
    </>
  );
}


Autres améliorations

  • Support natif des stylesheets avec priorité
  • Support des scripts async
  • Préchargement des ressources
  • Meilleurs messages d’erreur d’hydratation
  • <Context> au lieu de <Context.Provider>

Échanger avec un expert React

Nous revenons vers vous sous 24h.


Chez Makersquad, nous accompagnons nos clients dans la conception et l’évolution d’applications modernes avec React. Que vous souhaitiez lancer une nouvelle interface, faire évoluer une application existante ou préparer une migration vers les dernières versions, notre équipe vous aide à construire des front-ends robustes, performants et évolutifs.


À retenir

React 19 élimine du boilerplate et des patterns qu’on copiait-collait depuis des années. Les Actions simplifient les formulaires, use() change la façon dont on gère les données async, et la fin de forwardRef est une bénédiction. Si vous faites du React, cette version vaut le détour.


Django 5.2 LTS est sorti