Maison > Article > interface Web > Explorer l'utilisation de ReactCallback Hook : une plongée en profondeur
Les applications React nécessitent des performances optimales, d'autant plus qu'elles augmentent en taille et en complexité. Dans notre article précédent, nous explorons useMemo, un crochet clé pour mémoriser les valeurs calculées et éviter les recalculs inutiles. Si vous n'êtes pas familier avec useMemo ou si vous souhaitez rafraîchir votre compréhension, « Comprendre useMemo de React » offre des informations précieuses pour améliorer votre compréhension et optimiser l'efficacité des applications. La consultation de cet article peut fournir une base solide et des conseils pratiques pour améliorer les performances.
Dans cet article, nous nous concentrerons sur useCallback, un hook frère de useMemo, et explorerons comment il contribue à l'optimisation de vos composants React. Alors que useMemo est généralement utilisé pour mémoriser les résultats de fonctions, useCallback est conçu pour mémoriser des fonctions entières. Examinons sa fonctionnalité et en quoi elle diffère de useMemo.
À la base, useCallback est un hook React qui mémorise une fonction afin que la même instance de la fonction soit renvoyée à chaque rendu, tant que ses dépendances ne changent pas. Cela peut empêcher la recréation inutile de fonctions, ce qui est particulièrement utile lors de la transmission de fonctions en tant qu'accessoires aux composants enfants.
Voici un exemple de base :
import React, { useState, useCallback } from 'react'; function Parent() { const [count, setCount] = useState(0); const handleClick = useCallback(() => { console.log("Button clicked!"); }, []); return ( <div> <button onClick={handleClick}>Click me</button> <p>You've clicked {count} times</p> </div> ); }
Dans cet exemple, handleClick est mémorisé. Sans dépendances, il ne sera recréé que si le composant est démonté. Sans useCallback, cette fonction serait recréée à chaque rendu, même si sa logique reste inchangée.
Pendant que useCallback mémorise une fonction, useMemo mémorise le résultat de l'exécution d'une fonction. Donc, si vous souhaitez uniquement éviter les calculs ou les opérations inutiles, useMemo pourrait être une meilleure solution. Cependant, si vous souhaitez éviter de transmettre une nouvelle référence de fonction à chaque rendu, useCallback est l'outil à utiliser.
import React, { useState, useCallback } from 'react'; function Child({ onClick }) { console.log("Child component rendered"); return <button onClick={onClick}>Click me</button>; } export default function Parent() { const [count, setCount] = useState(0); const handleClick = useCallback(() => { console.log("Button clicked!"); }, []); return ( <div> <Child onClick={handleClick} /> <button onClick={() => setCount(count + 1)}>Increase count</button> </div> ); }
Ici, la fonction handleClick est mémorisée, ce qui empêche le composant Enfant de restituer inutilement lorsque l'état du composant parent change. Sans useCallback, le composant Child serait restitué à chaque modification du parent, car une nouvelle référence de fonction serait transmise à chaque fois.
Dans un scénario similaire, useMemo serait utilisé si le résultat d'une logique de fonction (et non la fonction elle-même) devait être transmis à l'enfant. Par exemple, mémoriser un calcul coûteux pour éviter de recalculer à chaque rendu.
import React, { useState, useCallback } from 'react'; function ListItem({ value, onClick }) { return <li onClick={() => onClick(value)}>{value}</li>; } export default function ItemList() { const [items] = useState([1, 2, 3, 4, 5]); const handleItemClick = useCallback((value) => { console.log("Item clicked:", value); }, []); return ( <ul> {items.map(item => ( <ListItem key={item} value={item} onClick={handleItemClick} /> ))} </ul> ); }
Dans ce scénario, useCallback garantit que la fonction handleItemClick reste la même d'un rendu à l'autre, évitant ainsi une recréation inutile de la fonction pour chaque élément de la liste.
Si, au lieu de transmettre un gestionnaire d'événements, nous calculions le résultat en fonction des éléments (par exemple, la somme des valeurs dans la liste), useMemo serait mieux adapté. useMemo est utilisé pour mémoriser une valeur calculée, tandis que useCallback est strictement destiné aux fonctions.
// Unnecessary use of useCallback const simpleFunction = useCallback(() => { console.log("Simple log"); }, []);
Dans des cas comme celui-ci, il n'est pas nécessaire de mémoriser la fonction car il n'y a pas de dépendance ni de surcharge de calcul.
const handleClick = useCallback(() => { console.log("Clicked with count:", count); }, [count]); // `count` is a dependency here
La fonction mémorisée utilisera des valeurs obsolètes si les dépendances nécessaires sont omises, ce qui entraînera des bugs potentiels.
useCallback et useMemo sont des outils inestimables pour l'optimisation des performances dans React, mais ils servent des objectifs différents. Utilisez useMemo lorsque vous devez mémoriser le résultat d'un calcul coûteux et utilisez useCallback lorsque vous devez vous assurer qu'une référence de fonction reste stable entre les rendus. En comprenant les distinctions et les cas d'utilisation de chacun, vous pouvez optimiser efficacement vos applications React.
Pour en savoir plus sur useMemo, assurez-vous de consulter l'article complet ici : Comprendre useMemo de React.
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!