React Hooks
El Hook useRef
useRef Hook ### ### Introducción ### El Hook useRef
permite crear una referencia mutable que persiste durante todo el ciclo de vida del componente. Es útil para acceder y manipular elementos del DOM directamente, mantener cualquier valor mutable que no cause una re-renderización cuando cambie, y almacenar valores previos entre renderizaciones. ### Sintaxis básica ### useRef
se usa para crear una referencia y puede ser asignada a elementos del DOM. javascript import React, { useRef } from 'react'; function TextInputWithFocusButton() { const inputEl = useRef(null); const onButtonClick = () => { inputEl.current.focus(); }; return ( <div> <input ref={inputEl} type='text' /> <button onClick={onButtonClick}>Enfocar el input</button> </div> ); }
### Descripción del ejemplo ### En este ejemplo: - inputEl
es una referencia creada con useRef
. - Se asigna inputEl
al elemento input
, por lo que inputEl.current
apunta al nodo del DOM. - La función onButtonClick
enfoca el input al invocar inputEl.current.focus()
. ### Otras aplicaciones de useRef ### useRef
no solo es para manipular el DOM; también puede mantener cualquier valor mutable entre renderizaciones que no causa una re-renderización cuando cambia. javascript import React, { useState, useRef, useEffect } from 'react'; function Timer() { const [count, setCount] = useState(0); const countRef = useRef(count); countRef.current = count; useEffect(() => { const interval = setInterval(() => { console.log(`Count is: ${countRef.current}`); setCount((prevCount) => prevCount + 1); }, 1000); return () => clearInterval(interval); }, []); return <div>Count: {count}</div>; }
### Descripción del ejemplo avanzado ### En este ejemplo: - countRef
se usa para almacenar el valor actual de count
de manera que el intervalo setInterval
siempre tenga el último valor sin necesidad de ser detenido y reiniciado. ### Uso común de useRef ### - Acceso directo a elementos del DOM: Enfocar inputs, detener animaciones, manipular canvas, etc. - Guardar valores de instancias previas: Mantener una referencia a valores previos sin causar re-renderización. - Mantener cualquier valor mutable: Ideal para almacenar datos que deben persistir a través de renderizaciones pero no causar re-render. ### Diferencia entre useRef y useState ### Mientras que useState
provoca la re-renderización del componente cuando cambia su valor, useRef
no. Esto hace a useRef
más adecuado para valores que cambian frecuentemente y no necesitan causar re-renderizaciones, como identificadores de intervalo o cualquier otra referencia mutable. ### Advertencias ### Aunque useRef
es poderoso, debe usarse con cautela: puede llevar a comportamientos difíciles de depurar si se combina con mutaciones no controladas del DOM o lógica de aplicación compleja. [Placeholder para imagen sobre el uso de useRef: Diagrama que muestra cómo useRef
interactúa con el DOM, incluyendo la creación de referencias y su uso en manipulaciones directas del DOM.]
Pregúntame lo que sea