Le useRefHook est un outil essentiel dans React qui nous permet de stocker des valeurs entre les rendus, d'accéder directement aux éléments DOM et d'éviter les nouveaux rendus inutiles. Il est souvent comparé à useStateHook mais sert un objectif différent.
À quoi sertRef Hook ?
Le hook useRef crée une référence à une valeur ou à un élément DOM qui persiste entre les rendus de composants. La principale différence entre useRef et useState est que la mise à jour de useRefvalue ne déclenche pas de nouveau rendu, ce qui peut être particulièrement utile dans certains scénarios.
Syntaxe de base
const refContainer = useRef(initialValue);
Exemple 1 : valeurs persistantes entre les rendus
import React, { useRef, useEffect } from "react"; function RenderCount() { const renderCount = useRef(1); useEffect(() => { renderCount.current = renderCount.current + 1; }); // Inline styles const containerStyle = { display: "flex", justifyContent: "center", alignItems: "center", height: "100vh", backgroundColor: "#f4f4f4", }; const headingStyle = { fontSize: "2rem", color: "#333", fontFamily: "Arial, sans-serif", backgroundColor: "#fff", padding: "20px", borderRadius: "8px", boxShadow: "0 4px 8px rgba(0, 0, 0, 0.1)", }; return ( <div style={containerStyle}> <h1 style={headingStyle}> This component has rendered {renderCount.current} times. </h1> </div> ); } export default RenderCount;
Sortie
Exemple 2 : Accéder aux éléments DOM
import React, { useState, useRef } from "react"; function Timer() { const [seconds, setSeconds] = useState(0); const intervalRef = useRef(null); // Start the timer const startTimer = () => { if (!intervalRef.current) { intervalRef.current = setInterval(() => { setSeconds((prevSeconds) => prevSeconds + 1); }, 1000); } }; // Stop the timer const stopTimer = () => { clearInterval(intervalRef.current); intervalRef.current = null; }; // Reset the timer const resetTimer = () => { stopTimer(); setSeconds(0); }; // Inline styles const timerContainerStyle = { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", height: "100vh", backgroundColor: "#f0f2f5", // Light neutral background }; const timerDisplayStyle = { fontSize: "3rem", color: "#2c3e50", // Dark blue-gray for a professional look }; const buttonStyle = { padding: "10px 20px", margin: "10px", fontSize: "1rem", backgroundColor: "#2980b9", // Professional blue color: "white", border: "none", borderRadius: "5px", cursor: "pointer", transition: "background-color 0.3s ease-in-out", }; const buttonHoverStyle = { backgroundColor: "#1a5276", // Darker shade for hover effect }; return ( <div style={timerContainerStyle}> <h1 style={timerDisplayStyle}>{seconds} seconds</h1> <div> <button style={buttonStyle} onClick={startTimer} onMouseOver={(e) => (e.currentTarget.style.backgroundColor = buttonHoverStyle.backgroundColor)} onMouseOut={(e) => (e.currentTarget.style.backgroundColor = buttonStyle.backgroundColor)} > Start </button> <button style={buttonStyle} onClick={stopTimer} onMouseOver={(e) => (e.currentTarget.style.backgroundColor = buttonHoverStyle.backgroundColor)} onMouseOut={(e) => (e.currentTarget.style.backgroundColor = buttonStyle.backgroundColor)} > Stop </button> <button style={buttonStyle} onClick={resetTimer} onMouseOver={(e) => (e.currentTarget.style.backgroundColor = buttonHoverStyle.backgroundColor)} onMouseOut={(e) => (e.currentTarget.style.backgroundColor = buttonStyle.backgroundColor)} > Reset </button> </div> </div> ); } export default Timer;
Sortie
Quand utiliser useRef au lieu de useState
Voici quelques scénarios dans lesquels useRefis est plus approprié que useState :
Lorsque vous devez stocker une valeur qui n'a pas besoin de déclencher un nouveau rendu lors de la mise à jour (par exemple, des minuteries, des compteurs ou des rendus de suivi).
Lorsque vous devez accéder ou modifier directement des éléments DOM sans provoquer de nouveau rendu.
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!