Maison interface Web js tutoriel Maîtriser l'optimisation des performances dans React : une plongée approfondie dans useCallback et useMemo

Maîtriser l'optimisation des performances dans React : une plongée approfondie dans useCallback et useMemo

Dec 03, 2024 pm 10:45 PM

Mastering Performance Optimization in React: A Deep Dive into useCallback and useMemo

Introduction

En tant que développeur frontend travaillant avec React et Next.js, je rencontre souvent des problèmes de performances à mesure que les applications évoluent. L’un des moyens les plus efficaces de résoudre ces problèmes consiste à utiliser des techniques d’optimisation, en particulier à l’aide des hooks useCallback et useMemo. Dans cet article de blog, j'expliquerai le fonctionnement de ces hooks, fournirai des exemples pratiques et illustrerai comment ils peuvent être appliqués dans des projets du monde réel pour améliorer les performances.

Comprendre l'optimisation des performances dans React

React est conçu pour être efficace, mais à mesure que votre application se développe, les performances peuvent souffrir en raison de nouveaux rendus inutiles. Chaque fois qu'un composant est restitué, toutes les fonctions qui y sont définies sont recréées, ce qui peut entraîner des goulots d'étranglement en termes de performances. C'est là que useCallback et useMemo deviennent des outils indispensables pour optimiser vos applications React.

À quoi sert le rappel ?

Le hook useCallback est utilisé pour mémoriser les fonctions. Il renvoie une version mémorisée de la fonction de rappel qui ne change que si l'une de ses dépendances a changé. Ceci est particulièrement utile lors de la transmission de rappels aux composants enfants qui s'appuient sur l'égalité des références pour éviter les rendus inutiles.

const memoizedCallback = useCallback(() => {
  // callback logic
}, [dependencies]);
Copier après la connexion

Exemple concret : soumission de commentaires dans une application de blog

Imaginez que vous créez une section de commentaires pour une application de blog. Chaque soumission de commentaire déclenche un nouveau rendu de la liste de commentaires. En utilisant useCallback, vous pouvez optimiser le gestionnaire de soumission pour éviter les nouveaux rendus inutiles.

import React, { useState, useCallback } from 'react';

const CommentSection = ({ postId }) => {
  const [comments, setComments] = useState([]);
  const [newComment, setNewComment] = useState('');

  const handleCommentSubmission = useCallback(() => {
    setComments((prevComments) => [...prevComments, newComment]);
    setNewComment('');
  }, [newComment]);

  return (
    <div>
      <h2>Comments</h2>
      <ul>
        {comments.map((comment, index) => (
          <li key={index}>{comment}</li>
        ))}
      </ul>
      <input
        type="text"
        value={newComment}
        onChange={(e) => setNewComment(e.target.value)}
      />
      <button onClick={handleCommentSubmission}>Submit</button>
    </div>
  );
};
Copier après la connexion

Dans cet exemple, la fonction _handleCommentSubmission _est mémorisée. Il ne sera recréé que si newComment change, évitant ainsi les rendus inutiles de tout composant enfant qui dépend de cette fonction.

Qu'est-ce que useMemo ?

Le hook useMemo est utilisé pour mémoriser des calculs coûteux. Il renvoie une valeur mémorisée qui n'est recalculée que lorsque l'une de ses dépendances change. Cela permet d'éviter des recalculs coûteux à chaque rendu.

const memoizedValue = useMemo(() => {
  // Expensive calculation
  return computedValue;
}, [dependencies]);
Copier après la connexion

Exemple concret : filtrage de grands ensembles de données

Considérez une application qui affiche une grande liste de produits. Lors du filtrage de cette liste en fonction des entrées de l'utilisateur, le recalcul des résultats filtrés à chaque rendu peut s'avérer inefficace. En utilisant useMemo, vous pouvez optimiser ce processus.

import React, { useState, useMemo } from 'react';

const ProductList = ({ products }) => {
  const [filterText, setFilterText] = useState('');

  const filteredProducts = useMemo(() => {
    return products.filter((product) =>
      product.name.toLowerCase().includes(filterText.toLowerCase())
    );
  }, [filterText, products]);

  return (
    <div>
      <input
        type="text"
        placeholder="Search products..."
        value={filterText}
        onChange={(e) => setFilterText(e.target.value)}
      />
      <ul>
        {filteredProducts.map((product) => (
          <li key={product.id}>{product.name}</li>
        ))}
      </ul>
    </div>
  );
};
Copier après la connexion

Dans cet exemple, le tableau filteredProducts est calculé uniquement lorsque filterText ou products change. Cela évite les calculs de filtrage inutiles lors des rendus lorsque d'autres variables d'état changent.

Bonnes pratiques d'utilisation de useCallback et useMemo

  1. Utiliser lorsque cela est nécessaire : implémentez ces hooks uniquement lorsque vous remarquez des problèmes de performances dus à des rendus fréquents ou à des calculs coûteux.

  2. Gardez les dépendances précises : assurez-vous que vos tableaux de dépendances sont corrects pour éviter les fermetures obsolètes ou les valeurs incorrectes.

  3. Combiner avec React.memo : utilisez React.memo pour les composants enfants à côté de ces hooks pour des performances optimales.

Conclusion

L'optimisation des performances dans les applications React est cruciale pour offrir une expérience utilisateur fluide. En utilisant efficacement useCallback et useMemo, vous pouvez minimiser les rendus inutiles et les calculs coûteux dans vos composants. Alors que vous poursuivez votre parcours en tant que développeur frontend, gardez ces outils à l'esprit et appliquez-les judicieusement pour améliorer l'efficacité de vos applications.

N'hésitez pas à partager vos réflexions ou à poser des questions dans les commentaires ci-dessous ! Vos commentaires m'aident à améliorer et à créer du contenu plus précieux pour les autres développeurs. Bon codage !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Remplacer les caractères de chaîne en javascript Remplacer les caractères de chaîne en javascript Mar 11, 2025 am 12:07 AM

Remplacer les caractères de chaîne en javascript

jQuery obtient un rembourrage / marge d'élément jQuery obtient un rembourrage / marge d'élément Mar 01, 2025 am 08:53 AM

jQuery obtient un rembourrage / marge d'élément

jQuery Vérifiez si la date est valide jQuery Vérifiez si la date est valide Mar 01, 2025 am 08:51 AM

jQuery Vérifiez si la date est valide

10 onglets jQuery Accordion 10 onglets jQuery Accordion Mar 01, 2025 am 01:34 AM

10 onglets jQuery Accordion

10 vaut la peine de vérifier les plugins jQuery 10 vaut la peine de vérifier les plugins jQuery Mar 01, 2025 am 01:29 AM

10 vaut la peine de vérifier les plugins jQuery

Http débogage avec le nœud et le http-console Http débogage avec le nœud et le http-console Mar 01, 2025 am 01:37 AM

Http débogage avec le nœud et le http-console

Tutoriel de configuration de l'API de recherche Google personnalisé Tutoriel de configuration de l'API de recherche Google personnalisé Mar 04, 2025 am 01:06 AM

Tutoriel de configuration de l'API de recherche Google personnalisé

jQuery Ajouter une barre de défilement à div jQuery Ajouter une barre de défilement à div Mar 01, 2025 am 01:30 AM

jQuery Ajouter une barre de défilement à div

See all articles