Gancho de useRef
reacción
El useRef
gancho le permite persistir valores entre renderizados.
Se puede usar para almacenar un valor mutable que no provoca una nueva representación cuando se actualiza.
Se puede utilizar para acceder a un elemento DOM directamente.
No causa re-renderizaciones
Si tratáramos de contar cuántas veces nuestra aplicación se renderiza usando el useState
Hook, estaríamos atrapados en un bucle infinito ya que este Hook en sí mismo provoca una nueva renderización.
Para evitar esto, podemos usar el useRef
Hook.
Ejemplo:
Úselo useRef
para realizar un seguimiento de los renderizados de la aplicación.
import { useState, useEffect, useRef } from "react";
import ReactDOM from "react-dom";
function App() {
const [inputValue, setInputValue] = useState("");
const count = useRef(0);
useEffect(() => {
count.current = count.current + 1;
});
return (
<>
<input
type="text"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
/>
<h1>Render Count: {count.current}</h1>
</>
);
}
ReactDOM.render(<App />, document.getElementById('root'));
useRef()
solo devuelve un artículo. Devuelve un Objeto llamado current
.
Cuando inicializamos useRef
establecemos el valor inicial: useRef(0)
.
Es como hacer esto: const count = {current: 0}
. Podemos acceder al conteo usando count.current
.
Ejecute esto en su computadora e intente escribir la entrada para ver cómo aumenta el recuento de procesamiento de la aplicación.
¡Obtener la certificación!
$95 INSCRÍBETE
Acceso a elementos DOM
En general, queremos dejar que React maneje toda la manipulación del DOM.
Pero hay algunos casos en los que useRef
se puede usar sin causar problemas.
En React, podemos agregar un ref
atributo a un elemento para acceder a él directamente en el DOM.
Ejemplo:
Use useRef
para enfocar la entrada:
import { useRef } from "react";
import ReactDOM from "react-dom";
function App() {
const inputElement = useRef();
const focusInput = () => {
inputElement.current.focus();
};
return (
<>
<input type="text" ref={inputElement} />
<button onClick={focusInput}>Focus Input</button>
</>
);
}
ReactDOM.render(<App />, document.getElementById('root'));
Seguimiento de cambios de estado
El useRef
gancho también se puede utilizar para realizar un seguimiento de los valores de estado anteriores.
Esto se debe a que podemos persistir useRef
valores entre renderizados.
Ejemplo:
Úselo useRef
para realizar un seguimiento de los valores de estado anteriores:
import { useState, useEffect, useRef } from "react";
import ReactDOM from "react-dom";
function App() {
const [inputValue, setInputValue] = useState("");
const previousInputValue = useRef("");
useEffect(() => {
previousInputValue.current = inputValue;
}, [inputValue]);
return (
<>
<input
type="text"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
/>
<h2>Current Value: {inputValue}</h2>
<h2>Previous Value: {previousInputValue.current}</h2>
</>
);
}
ReactDOM.render(<App />, document.getElementById('root'));
Esta vez usamos una combinación de useState
, useEffect
y useRef
para realizar un seguimiento del estado anterior.
En useEffect
, estamos actualizando el useRef
valor actual cada vez inputValue
que se actualiza ingresando texto en el campo de entrada.