"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > useMemo Hook expliqué

useMemo Hook expliqué

Publié le 2024-11-02
Parcourir:583

useMemo Hook Explained

Le hook useMemo fait partie de l'API Hooks de React, introduite dans React 16.8, conçue pour optimiser les performances en mémorisant les résultats de calculs coûteux. Voici une explication détaillée :

Qu’est-ce qu’useMemo ?

useMemo est un hook qui renvoie une valeur mémorisée. Il vous permet de mettre en cache le résultat d'un calcul afin qu'il n'ait pas besoin d'être recalculé à chaque rendu, sauf si ses dépendances changent. Cela peut aider à éviter les nouveaux rendus inutiles et à améliorer les performances de votre application React.

Syntaxe

const memoizedValue = useMemo(() => {
  // computation or expensive calculation
  return value;
}, [dependencies]);

Paramètres

  1. Fonction (rappel) : une fonction qui renvoie une valeur que vous souhaitez mémoriser.
  2. Tableau de dépendances : Un tableau de dépendances qui, une fois modifiées, entraîneront le recalcul de la valeur mémorisée. Si ce tableau est vide, la valeur ne sera calculée qu'une seule fois (comme ComponentDidMount).

Comment ça marche

  • Lors du rendu initial, useMemo exécutera la fonction fournie et renverra son résultat, qui est stocké dans memoizedValue.
  • Lors des rendus suivants, React vérifiera si l'une des dépendances a changé. Si ce n’est pas le cas, il renverra la valeur mise en cache au lieu de la recalculer.
  • Si une dépendance a changé, React exécutera à nouveau la fonction, mettra à jour la valeur mise en cache et renverra la nouvelle valeur.

Exemple

Voici un exemple simple pour illustrer useMemo :

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

const ExpensiveComponent = ({ number }) => {
  const computeFactorial = (n) => {
    console.log('Calculating factorial...');
    return n  computeFactorial(number), [number]);

  return (
    

Factorial of {number} is {factorial}

); }; const App = () => { const [num, setNum] = useState(0); return (
); }; export default App;

Quand utiliser useMemo

  • Calculs coûteux : utilisez useMemo lorsque vous avez des calculs coûteux en termes de performances et qui ne doivent être recalculés que lorsque des entrées spécifiques changent.
  • Éviter les rendus inutiles : si vous transmettez des objets ou des tableaux en tant qu'accessoires aux composants enfants, vous pouvez utiliser useMemo pour vous assurer qu'ils ne sont pas recréés à chaque rendu, évitant ainsi les nouveaux rendus inutiles.

Considérations importantes

  • Performances : une utilisation excessive de useMemo peut conduire à un code plus complexe et ne génère pas toujours des avantages en termes de performances. Il est préférable de l'utiliser pour des calculs vraiment coûteux.
  • Recréation de fonction : si vous mémorisez des fonctions, soyez prudent car la définition de la fonction sera toujours recréée à moins qu'elle ne soit enveloppée dans useCallback.

Conclusion

useMemo est un outil puissant dans React pour optimiser les performances en mémorisant les valeurs. Cela peut contribuer à garantir que des calculs coûteux ne sont effectués que lorsque cela est nécessaire, améliorant ainsi l'efficacité de vos composants React. Cependant, il doit être utilisé judicieusement pour éviter une complexité inutile dans votre code.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/imyusufakhtar/usememo-hook-explained-2gee?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3