Malheureusement, useRef est sous-estimé. Ce n’est pas l’un des hameçons les plus populaires, mais il est bénéfique. Savoir comment et où l'utiliser peut obtenir d'excellents résultats.
useRef est un React Hook qui vous permet de référencer une valeur non nécessaire pour le rendu.
React se souviendra de la valeur que vous créez via useRef, que vous créiez un objet JavaScript faisant référence à un nœud dans le DOM ou à une valeur simple, et elle ne sera pas perdue lors des nouveaux rendus.
Accès aux éléments DOM :
Stockage de valeurs mutables :
Voici quelques exemples pour illustrer la puissance de useRef.
import React, { useRef } from 'react'; const Counter = () => { const refCount = useRef(0); const refInputField = useRef(null); const onClick = () => { refCount.current = refCount.current 1; refInputField.current.focus(); } return ( > ); }; export default Counter;
Dans cet exemple :
Un autre cas d'utilisation courant de useRef consiste à garder une trace des valeurs précédentes.
import React, { useRef, useEffect, useState } from 'react'; const PreviousValue = () => { const [count, setCount] = useState(0); const prevCountRef = useRef(); useEffect(() => { prevCountRef.current = count; }, [count]); return (); }; export default PreviousValue;Current Count: {count}
Previous Count: {prevCountRef.current}
Dans cet exemple :
useRef peut être utilisé pour conserver les valeurs à travers les rendus sans provoquer de nouveau rendu, contrairement à useState. Ceci est particulièrement utile pour stocker des valeurs qui n'ont pas d'impact direct sur l'interface utilisateur mais qui doivent être mémorisées.
Exemple : suivi du nombre de rendus d'un composant.
import React, { useRef, useEffect } from 'react'; const RenderCounter = () => { const renderCount = useRef(0); useEffect(() => { renderCount.current = 1; }); return (); }; export default RenderCounter;This component has rendered {renderCount.current} times
useRef est inestimable lorsque vous travaillez avec des bibliothèques tierces qui nécessitent une manipulation directe des éléments DOM, comme l'intégration avec des bibliothèques de graphiques, la gestion de lecteurs vidéo ou la gestion d'animations.
Exemple : Intégration d'une bibliothèque de graphiques.
import React, { useRef, useEffect } from 'react'; import Chart from 'chart.js/auto'; const ChartComponent = () => { const chartRef = useRef(null); useEffect(() => { const ctx = chartRef.current.getContext('2d'); new Chart(ctx, { type: 'line', data: { labels: ['January', 'February', 'March', 'April'], datasets: [{ label: 'Sales', data: [65, 59, 80, 81], }], }, }); }, []); return ; }; export default ChartComponent;
Dans les applications complexes où les performances sont essentielles, l'utilisation de useRef pour stocker des objets mutables peut permettre d'éviter de nouveaux rendus inutiles.
Exemple : stockage d'un objet d'état mutable.
import React, { useRef } from 'react'; const MutableState = () => { const state = useRef({ name: 'John Doe', age: 30, }); const updateName = (newName) => { state.current.name = newName; console.log('Name updated:', state.current.name); }; return (); }; export default MutableState;
L'utilisation de useRef peut aider à éviter les problèmes de fermeture en fournissant une référence stable à une valeur qui persiste dans les rendus.
Exemple : minuterie avec useRef pour éviter un état obsolète.
import React, { useRef, useState, useEffect } from 'react'; const Timer = () => { const [count, setCount] = useState(0); const countRef = useRef(count); countRef.current = count; useEffect(() => { const intervalId = setInterval(() => { setCount(countRef.current 1); }, 1000); return () => clearInterval(intervalId); }, []); returnCount: {count}; }; export default Timer;
Les crochets sont excellents et vous devriez les utiliser. Vous pouvez réaliser beaucoup de choses si vous comprenez comment fonctionne React et appliquez correctement les hooks. useRef est particulièrement puissant pour :
En comprenant et en utilisant useRef, vous pouvez écrire des composants React plus efficaces et efficients. Le véritable pouvoir des hooks réside dans la compréhension de leur comportement et dans leur application judicieuse.
Savez-vous que useState n'est pas toujours la bonne réponse ?
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