Next Generation — Agence Digitale
    Aller au contenu principal
    Blog
    3 juin 20263 min

    Bug RCP React : les 5 causes invisibles de re-renders

    Bug RCP = comportement inattendu causé par les props React (re-renders, closures stale). Invisibles en dev, critiques en prod. Les 5 causes les plus fréquentes.

    MB

    Meymoun Boualaoui

    Président · DG · CTO — Fondateur

    Bug RCP (React Component Props) : les 5 causes invisibles

    "Bug RCP" = comportement inattendu causé par les props React (re-renders, références instables, closures stale). Invisibles en dev, critiques en prod.

    Cause 1 : objet/array recréé à chaque render

    tsx
    // ❌ {} recréé à chaque render → useEffect tourne en boucle
    <Foo config={{ enabled: true }} />
    
    // ✅ référence stable
    const config = useMemo(() => ({ enabled: true }), []);
    <Foo config={config} />

    Cause 2 : fonction inline dans deps

    useEffect(() => fn(), [fn]) où fn est définie inline → boucle infinie. Solution : useCallback ou sortir la fonction du composant.

    Cause 3 : closure stale dans setInterval/setTimeout

    tsx
    useEffect(() => {
      const id = setInterval(() => console.log(count), 1000);
      return () => clearInterval(id);
    }, []); // count n'est jamais à jour

    Solution : ref qui pointe la valeur courante, OU dépendance [count] (et clear/recreate).

    Cause 4 : key manquante ou instable dans .map()

    key={Math.random()} ou key={index} sur liste qui change → React remonte les composants → perte state interne, bugs visuels.

    Solution : key={stable.id}.

    Cause 5 : state dérivable mis en state

    tsx
    // ❌ state dérivable
    const [fullName, setFullName] = useState(`${first} ${last}`);
    useEffect(() => setFullName(`${first} ${last}`), [first, last]);
    
    // ✅ dérivé direct
    const fullName = `${first} ${last}`;

    Détecter : React DevTools Profiler

    Highlights re-renders. Tout composant qui re-render sans changement de props utiles = candidat refacto. React.memo + useMemo ciblés (pas partout).

    Anti-pattern : memo partout

    React.memo sur tout = coût > gain. À réserver aux composants : (1) coûteux à render, (2) qui re-render souvent inutilement. Profiler avant d'optimiser.

    Partager

    Questions fréquentes

    MB

    Écrit par

    Meymoun Boualaoui

    Président · DG · CTO — Fondateur

    Fondateur de Next Generation. Dev full-stack, SEO technique et architecture web — il maîtrise toute la chaîne de production, de l'infra au contenu qui ranke. Direct, analytique, perfectionniste.

    Voir le profil & tous les articles
    Service lié

    Besoin d'un accompagnement en seo & référencement ?

    Vos concurrents vous devancent sur Google. On renverse la situation. Audit, contenu, netlinking, résultats durables.

    Besoin d'aide pour votre stratégie digitale ?

    Nos experts sont là pour transformer vos ambitions en résultats concrets.

    Audit gratuitSans engagementRéponse sous 24h