0Pricing
React Academy · Leçon

useDeferredValue pour temporiser les saisies

Retardez les nouveaux rendus des parties lentes de l’interface tout en gardant la saisie fluide.

useDeferredValue pour temporiser les saisies est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 3 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 useDeferredValue pour retarder le nouveau rendu des parties coûteuses de l'interface tout en gardant les champs contrôlés réactifs et rapides.

Qu'est-ce que useDeferredValue ?

useDeferredValue prend une valeur en argument et en renvoie une version différée. La valeur différée prend du retard sur la valeur actuelle pendant les rendus urgents, ce qui permet à React de mettre à jour l'interface en deux temps : rapidement pour la saisie, puis de façon différée pour la sortie coûteuse.
const [query, setQuery] = useState('');
const deferredQuery = useDeferredValue(query);
// query updates immediately on keystroke
// deferredQuery updates when React has capacity

Application aux composants coûteux

Transmettez la valeur différée, et non la valeur actuelle, au composant coûteux. Celui-ci n'effectue un nouveau rendu que lorsque deferredQuery change, ce qui prend du retard sur la saisie lors d'une frappe rapide.
function App() {
  const [q, setQ] = useState('');
  const dq = useDeferredValue(q);
  return (
    <>
      <input value={q} onChange={e => setQ(e.target.value)} />
      <HeavyList query={dq} /> {/* renders with deferred value */}
    </>
  );
}

Afficher un indicateur de contenu obsolète

Comparez la valeur actuelle à la valeur différée. Lorsqu'elles sont différentes, le contenu est obsolète et vous pouvez l'atténuer avec l'opacité ou afficher un indicateur de chargement.
const isStale = q !== dq;
<div style={{ opacity: isStale ? 0.5 : 1 }}>
  <HeavyList query={dq} />
</div>

useDeferredValue ou l'anti-rebond

Un anti-rebond fondé sur setTimeout introduit toujours un délai fixe, par exemple 300 ms, même sur les appareils rapides. useDeferredValue s'adapte : sur les appareils rapides, le rendu est immédiat ; sur les appareils lents, la mise à jour est différée pour éviter les saccades.

useDeferredValue ou useTransition

Utilisez useTransition lorsque vous êtes propriétaire de la fonction de mise à jour d'état, car vous pouvez envelopper setState. Utilisez useDeferredValue lorsque vous recevez une valeur comme propriété ou depuis un contexte et que vous ne contrôlez pas le moment où elle est mise à jour.
// You own the state: use useTransition
startTransition(() => setTab(newTab));

// You receive the value: use useDeferredValue
const deferredProp = useDeferredValue(props.searchQuery);

Combinaison avec React.memo

Pour que useDeferredValue évite efficacement les nouveaux rendus, le composant coûteux doit être enveloppé dans React.memo. Sans cela, le composant effectue un nouveau rendu à chaque nouveau rendu du parent, quelle que soit la valeur différée.
const HeavyList = React.memo(function({ query }) {
  // expensive rendering
  return <ul>{data.filter(q => ...).map(...)}</ul>;
});

La valeur différée lors du rendu initial

Lors du rendu initial, la valeur différée est égale à la valeur actuelle : il n'y a aucun délai. La différenciation n'intervient que lorsque les valeurs actuelle et différée sont différentes pendant un nouveau rendu.

Plusieurs valeurs différées

Vous pouvez appeler useDeferredValue plusieurs fois pour différentes parties coûteuses de l'interface, chacune étant différée indépendamment.
const deferredA = useDeferredValue(valueA);
const deferredB = useDeferredValue(valueB);

Limites

useDeferredValue n'accélère pas le rendu : il le retarde simplement. Si le rendu coûteux prend 500 ms, l'interface aura toujours des saccades. Combinez-le avec la virtualisation (react-virtual) pour les listes vraiment volumineuses.

Vérification rapide

Quand useDeferredValue apporte-t-il un avantage par rapport à une valeur ordinaire ?

Récapitulatif

useDeferredValue renvoie une version retardée d'une valeur. Transmettez-la aux composants coûteux enveloppés dans React.memo. Affichez un indicateur de contenu obsolète lorsque deferredValue !== value. Préférez cette solution à un anti-rebond à délai fixe pour obtenir des performances adaptatives.

À suivre

Prochaine leçon : **Suspense pour les limites de données et de code** — vous combinerez Suspense avec le chargement différé et des bibliothèques de données pour obtenir des états de chargement clairs.

Questions Fréquemment Posées

La leçon « useDeferredValue pour temporiser les saisies » est-elle gratuite ?

Oui — le texte complet de « useDeferredValue pour temporiser les saisies » 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 « useDeferredValue pour temporiser les saisies » ?

Retardez les nouveaux rendus des parties lentes de l’interface tout en gardant la saisie fluide. 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 3 sur 4.

Combien de temps prend la leçon « useDeferredValue pour temporiser les saisies » ?

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