Maison >interface Web >js tutoriel >Maîtriser le hook useRef de React : travailler avec DOM et les valeurs mutables
Le hook useRef est un hook React intégré utilisé pour conserver les valeurs à travers les rendus sans provoquer de nouveaux rendus. Il est souvent utilisé pour interagir directement avec les éléments DOM et pour stocker les valeurs qui doivent persister entre les rendus mais qui n'ont pas nécessairement besoin de déclencher un nouveau rendu.
Le hook useRef est principalement utilisé à deux fins :
const myRef = useRef(initialValue);
L'objet de référence renvoyé par useRef a une propriété actuelle, où la valeur réelle est stockée.
const MyComponent = () => { const inputRef = useRef(null); const focusInput = () => { // Access the DOM node and focus it inputRef.current.focus(); }; return ( <div> <input ref={inputRef} /> <button onClick={focusInput}>Focus Input</button> </div> ); };
const TimerComponent = () => { const countRef = useRef(0); const increment = () => { countRef.current++; console.log(countRef.current); // This will log the updated value }; return ( <div> <p>Current count (does not trigger re-render): {countRef.current}</p> <button onClick={increment}>Increment</button> </div> ); };
const ScrollToTop = () => { const topRef = useRef(null); const scrollToTop = () => { topRef.current.scrollIntoView({ behavior: 'smooth' }); }; return ( <div> <div ref={topRef}> <ol> <li> <strong>Storing Previous State</strong>: If you need to track the previous value of a prop or state value. </li> </ol> <pre class="brush:php;toolbar:false"> const PreviousState = ({ count }) => { const prevCountRef = useRef(); useEffect(() => { prevCountRef.current = count; // Store the current value in the ref }, [count]); return ( <div> <p>Current Count: {count}</p> <p>Previous Count: {prevCountRef.current}</p> </div> ); };
Éviter les nouveaux rendus pour les valeurs complexes : Si vous disposez d'un objet volumineux ou d'une structure de données complexe qui n'a pas besoin de déclencher un nouveau rendu, useRef peut le stocker sans affecter le composant. performances.
Intervalle de suivi ou délai d'attente : vous pouvez stocker les identifiants des délais d'attente ou des intervalles pour les effacer plus tard.
const myRef = useRef(initialValue);
Feature | useRef | useState |
---|---|---|
Triggers re-render | No (does not trigger a re-render) | Yes (triggers a re-render when state changes) |
Use Case | Storing mutable values or DOM references | Storing state that affects rendering |
Value storage | Stored in current property | Stored in state variable |
Persistence across renders | Yes (keeps value across renders without triggering re-render) | Yes (but triggers re-render when updated) |
Voici un exemple où useRef est utilisé pour la validation d'un formulaire, en se concentrant sur un champ de saisie lorsqu'il n'est pas valide.
importer React, {useRef, useState } depuis 'react' ; const FormComponent = () => { const inputRef = useRef(); const [inputValue, setInputValue] = useState(''); const [erreur, setError] = useState(''); const validateInput = () => { si (valeur d'entrée === '') { setError('L'entrée ne peut pas être vide'); inputRef.current.focus(); // Focus sur l'élément d'entrée } autre { setErreur(''); } } ; retour ( <div> <entrée ref={inputRef} type="texte" valeur={inputValue} onChange={(e) => setInputValue(e.target.value)} /> {erreur && <p>
Le hook useRef est incroyablement utile pour gérer les valeurs mutables et la manipulation directe du DOM dans React. Que vous travailliez avec des éléments de formulaire, suiviez l'état précédent ou interagiez avec des bibliothèques tierces, useRef fournit une solution propre et efficace. En utilisant useRef, vous pouvez maintenir la persistance sans déclencher de nouveaux rendus inutiles, ce qui en fait un excellent choix pour les opérations sensibles aux performances.
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!