Gancho de useRef
reação
O useRef
Hook permite que você persista valores entre renderizações.
Ele pode ser usado para armazenar um valor mutável que não causa uma nova renderização quando atualizado.
Ele pode ser usado para acessar diretamente um elemento DOM.
Não causa re-renderizações
Se tentássemos contar quantas vezes nosso aplicativo renderiza usando o useState
Hook, seríamos pegos em um loop infinito, pois esse próprio Hook causa uma nova renderização.
Para evitar isso, podemos usar o useRef
Hook.
Exemplo:
Use useRef
para rastrear renderizações de aplicativos.
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()
retorna apenas um item. Ele retorna um Object chamado current
.
Quando inicializamos useRef
, definimos o valor inicial: useRef(0)
.
É como fazer isso: const count = {current: 0}
. Podemos acessar a contagem usando count.current
.
Execute isso no seu computador e tente digitar a entrada para ver o aumento da contagem de renderização do aplicativo.
Obter certificação!
$ 95 INSCRIÇÃO
Acessando elementos DOM
Em geral, queremos deixar o React lidar com todas as manipulações do DOM.
Mas há alguns casos em que useRef
pode ser usado sem causar problemas.
No React, podemos adicionar um ref
atributo a um elemento para acessá-lo diretamente no DOM.
Exemplo:
Use useRef
para focar a 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'));
Acompanhamento de alterações de estado
O useRef
Gancho também pode ser usado para rastrear valores de estado anteriores.
Isso ocorre porque somos capazes de persistir useRef
valores entre renderizações.
Exemplo:
Use useRef
para acompanhar os 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'));
Desta vez, usamos uma combinação de useState
, useEffect
e useRef
para acompanhar o estado anterior.
No useEffect
, estamos atualizando o useRef
valor atual cada vez que o inputValue
é atualizado inserindo texto no campo de entrada.