0Pricing
React Academy · Leçon

useTransition pour des mises à jour d’interface non bloquantes

Enveloppez les mises à jour d’état coûteuses dans startTransition afin que l’interface reste réactive.

useTransition pour des mises à jour d’interface non bloquantes est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Bienvenue

Dans cette leçon, vous utiliserez le hook useTransition pour marquer les mises à jour d'état coûteuses comme non urgentes et garder l'interface réactive pendant qu'un rendu lourd s'effectue en arrière-plan.

Le problème des mises à jour bloquantes

Lorsque vous saisissez du texte dans un champ de recherche qui filtre une grande liste, React doit effectuer un nouveau rendu de toute la liste filtrée à chaque frappe. Cela empêche le champ de saisie de se mettre à jour immédiatement et donne une impression de lenteur à l'interface.

Mode concurrent de React

React 18 a introduit le rendu concurrent : React peut commencer le rendu d'une mise à jour d'état, le mettre en pause et donner la priorité aux mises à jour plus urgentes, comme la saisie. useTransition est le hook qui vous permet de classer les mises à jour comme des transitions de faible priorité.

Principes de base de useTransition

useTransition renvoie `[isPending, startTransition]`. Placez la mise à jour d'état non urgente dans `startTransition()`. React donnera la priorité aux autres mises à jour, comme le champ de saisie contrôlé, plutôt qu'à la transition.
const [isPending, startTransition] = useTransition();

const handleChange = (e) => {
  setInputValue(e.target.value); // urgent: update input immediately
  startTransition(() => {
    setFilteredList(filter(e.target.value)); // non-urgent
  });
};

isPending pour l'interface de chargement

Pendant le traitement de la transition, `isPending` vaut `true`. Utilisez-le pour afficher un indicateur de chargement ou atténuer la liste de résultats obsolète, afin d'informer les utilisateurs qu'une mise à jour est en cours.
return (
  <>
    <input value={inputValue} onChange={handleChange} />
    {isPending && <Spinner />}
    <ResultList items={filteredList} />
  </>
);

Que placer dans startTransition

Placez uniquement les mises à jour d'état dans startTransition, et non les opérations asynchrones. C'est la mise à jour d'état qui déclenche le rendu coûteux que vous devez envelopper.
// Correct
startTransition(() => setTab('heavy'));

// Wrong — async work outside React state
startTransition(async () => { await fetch(...); }); // not supported

startTransition sans le hook

Si vous n'avez pas besoin de `isPending`, vous pouvez importer et appeler directement `startTransition` depuis React, sans utiliser le hook.
import { startTransition } from 'react';

startTransition(() => setQuery(newValue));

Exemple de changement d'onglet

Un cas d'utilisation courant consiste à cliquer sur un onglet pour changer de composant lourd. Enveloppez le changement d'onglet dans startTransition afin que l'indicateur de l'onglet actif se mette à jour immédiatement, tandis que le composant lourd est rendu en arrière-plan.
const [tab, setTab] = useState('posts');
const [isPending, startTransition] = useTransition();

const selectTab = (t) =>
  startTransition(() => setTab(t));

useTransition ou useDeferredValue

useTransition s'utilise lorsque vous êtes propriétaire de la mise à jour d'état (vous appelez setState). useDeferredValue s'utilise lorsque vous recevez une propriété ou une valeur dont vous ne pouvez pas retarder directement la mise à jour : c'est la valeur elle-même qui est différée.

Cela ne remplace pas l'optimisation

startTransition n'accélère pas le rendu : il le diffère simplement. Si le rendu d'un composant prend 500 ms, il prendra toujours 500 ms. Combinez cette approche avec React.memo ou la virtualisation pour les listes réellement lentes.

Vérification rapide

Que représente isPending fourni par useTransition ?

Récapitulatif

useTransition vous permet de classer les mises à jour d'état comme des transitions non urgentes. Les mises à jour urgentes, comme la saisie, sont rendues immédiatement ; les transitions sont rendues lorsque React en a la capacité. Utilisez isPending pour afficher un retour visuel de chargement.

À suivre

Prochaine leçon : **useDeferredValue pour l'anti-rebond de la saisie** — vous retarderez le nouveau rendu des parties lentes de l'interface tout en gardant la saisie réactive.

Questions Fréquemment Posées

La leçon « useTransition pour des mises à jour d’interface non bloquantes » est-elle gratuite ?

Oui — le texte complet de « useTransition pour des mises à jour d’interface non bloquantes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « useTransition pour des mises à jour d’interface non bloquantes » ?

Enveloppez les mises à jour d’état coûteuses dans startTransition afin que l’interface reste réactive. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « useTransition pour des mises à jour d’interface non bloquantes » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Conditions de concurrence et nettoyage des effets
  2. useTransition pour des mises à jour d’interface non bloquantes
  3. useDeferredValue pour temporiser les saisies
  4. Suspense pour les frontières de données et de code
← Retour à React Academy