Diagnostiquer et corriger les re-rendus lents dans React

Trouvez pourquoi un composant React est lent, mesurez avec le Profiler et appliquez les bonnes corrections (placement de l’état, memo, virtualisation, transitions) avec le code avant et après. Conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Il comprend 4 variables personnalisables et vous pouvez le copier gratuitement en un clic.

Avancé · Code · En attente de relecture éditoriale

Prompt

Agis comme un spécialiste de la performance React qui diagnostique avant d'optimiser.

Contexte :
- Code concerné : {{code}}
- Symptôme observé : {{symptome}}
- Données de mesure (s'il y en a) : {{mesures}}
- Version de React : {{version_react}}

Si le code ne suffit pas pour voir d'où viennent les props ou l'état, demande-moi les composants parents ou le contexte avant de proposer des changements.

Livrables :
1. Des hypothèses classées par probabilité sur l'origine des re-rendus ou du travail excessif (état placé trop haut, valeur de contexte qui change à chaque rendu, objets ou fonctions recréés à chaque rendu, longues listes non virtualisées, calculs coûteux pendant le rendu, keys instables).
2. Comment confirmer chaque hypothèse avec le Profiler des React DevTools (quoi enregistrer, quoi regarder dans le flamegraph et dans « pourquoi ce rendu ») et, si utile, avec le panneau Performance du navigateur.
3. Les corrections, de la plus simple à la plus complexe : descendre l'état, passer le contenu en children, découper le contexte, useMemo/useCallback/memo seulement là où la mesure le justifie, useDeferredValue ou useTransition pour les champs de saisie, virtualisation des listes.
4. Le code avant et après chaque changement appliqué, avec l'effet attendu.
5. Comment vérifier le gain avec la même mesure et quel seuil considérer comme suffisant.
6. Ce qu'il ne faut pas faire : tout envelopper dans memo, optimiser sans mesurer ou sacrifier la lisibilité pour des gains minimes.

Contraintes :
- N'invente ni durées ni gains en pourcentage ; si je n'ai pas de mesures, explique comment les obtenir et laisse [À COMPLÉTER].
- Si la version utilise React Compiler, tiens compte de sa mémoïsation automatique et adapte les conseils.
- Garde un comportement fonctionnel identique.

Format : diagnostic, plan de mesure, changements avec blocs de code et checklist de vérification finale.

Comment l'utiliser

  1. Colle le composant lent et ses parents directs. 2. Décris précisément le symptôme (quelle action, combien de temps, sur quel appareil). 3. Enregistre une session du Profiler, colle ce que tu vois et applique les changements un par un en mesurant à chaque fois.

Exemple d'utilisation

Code : TableauCommandes.tsx avec 2000 lignes et un filtre texte · Symptôme : la saisie dans le filtre est retardée sur un portable milieu de gamme · Mesures : aucune · Version : React 18.

Exemple de résultat

Hypothèses (de la plus à la moins probable)

  1. Chaque frappe filtre les 2000 lignes et les re-rend toutes dans le même rendu urgent.
  2. Les lignes ne sont pas mémoïsées et reçoivent de nouveaux objets à chaque rendu.
  3. Pas de virtualisation : le DOM contient les 2000 lignes.

Mesurer d'abord

Dans React DevTools → Profiler, enregistrez pendant que vous tapez 5 lettres. Repérez les commits longs dans TableauCommandes et activez « Record why each component rendered ». Durée par commit avant le changement : [À COMPLÉTER].

Changement 1 : découpler la saisie du filtrage

import { memo, useDeferredValue, useMemo, useState } from 'react';

export function TableauCommandes({ commandes }: { commandes: Commande[] }) {
  const [filtre, setFiltre] = useState('');
  const filtreDiffere = useDeferredValue(filtre);
  const visibles = useMemo(
    () => commandes.filter((c) => c.client.toLowerCase().includes(filtreDiffere.toLowerCase())), // [À COMPLÉTER : vrai champ]
    [commandes, filtreDiffere],
  );
  return (
    <>
      <input value={filtre} onChange={(e) => setFiltre(e.target.value)} aria-label="Filtrer les commandes" />
      <Lignes commandes={visibles} />
    </>
  );
}

const Lignes = memo(function Lignes({ commandes }: { commandes: Commande[] }) {
  return <table><tbody>{commandes.map((c) => <LigneCommande key={c.id} commande={c} />)}</tbody></table>;
});

Le champ se met à jour immédiatement et la liste est recalculée en priorité basse ; memo évite de re-rendre les lignes tant que la valeur différée ne change pas. Si c'est encore lent, l'étape suivante est la virtualisation…

Informations clés

Catégorie
Programmation et développement · React
Type de résultat
Code
Niveau
Avancé
Conçu pour
ChatGPT, Claude, Gemini et Microsoft Copilot
Vérifié sur
En attente de vérification éditoriale
Variables
Code concerné, Symptôme, Données de mesure et Version de React
Langue
Français
Prix
Gratuit, sans inscription
Mis à jour
07/11/2026

Questions fréquentes

Faut-il mettre useMemo et useCallback partout ?

Non. Ils ont leur propre coût et alourdissent le code. Utilise-les quand le Profiler montre qu’un calcul ou un re-rendu précis pèse, ou quand une référence stable est nécessaire pour que memo fonctionne.

Quand faut-il virtualiser une liste ?

Quand des centaines ou des milliers d’éléments complexes sont rendus en même temps et que le Profiler ou le panneau Performance montre que le coût vient du montage de ces nœuds. Pour des listes courtes, c’est rarement utile.

À quoi sert ce prompt ?

Trouvez pourquoi un composant React est lent, mesurez avec le Profiler et appliquez les bonnes corrections (placement de l’état, memo, virtualisation, transitions) avec le code avant et après.

Avec quels outils d'IA fonctionne-t-il ?

Il est conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Nous ne l'avons pas encore vérifié sur ces outils ; les résultats peuvent donc varier de l'un à l'autre.

Comment personnaliser le prompt ?

Cliquez sur « Personnaliser » et remplissez les variables (Code concerné, Symptôme, Données de mesure et Version de React). Le texte se met à jour instantanément et vous pouvez ensuite le copier en un clic. Les valeurs sont stockées uniquement dans votre navigateur.

Faut-il de l'expérience pour l'utiliser ?

Il est de niveau avancé : il s'adresse aux personnes expérimentées dans le domaine, capables d'évaluer et d'ajuster le résultat.

Ce prompt est-il gratuit ?

Oui. Tous les prompts de HomeCasa Prompts sont gratuits, sans inscription ni abonnement. Vous pouvez aussi les utiliser dans des projets professionnels.

Puis-je me fier au résultat de l'IA ?

Considérez-le comme un brouillon de qualité : vérifiez toujours les données, les chiffres et les affirmations importantes avant de publier ou de prendre des décisions.

Prompts similaires