Reagovat useRef
Hook
useRef
Hook vám umožňuje uchovat hodnoty mezi rendery .
Lze jej použít k uložení měnitelné hodnoty, která při aktualizaci nezpůsobí opětovné vykreslení.
Lze jej použít pro přímý přístup k prvku DOM.
Nezpůsobuje opakované vykreslování
Pokud bychom se pokusili spočítat, kolikrát se naše aplikace vykresluje pomocí useState
Hooku, byli bychom chyceni v nekonečné smyčce, protože tento Hook sám o sobě způsobuje opětovné vykreslování.
Abychom tomu zabránili, můžeme použít useRef
Hook.
Příklad:
Slouží useRef
ke sledování vykreslování aplikací.
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()
vrací pouze jednu položku. Vrací objekt s názvem current
.
Při inicializaci useRef
nastavíme počáteční hodnotu: useRef(0)
.
Je to jako dělat toto: const count = {current: 0}
. K počtu můžeme přistupovat pomocí count.current
.
Spusťte to na svém počítači a zkuste zadat vstup, abyste viděli, jak se zvyšuje počet vykreslení aplikace.
Získejte certifikaci!
95 $ PŘIHLÁSIT SE
Přístup k prvkům DOM
Obecně chceme nechat React zvládnout veškerou DOM manipulaci.
Existují však případy, kdy useRef
je lze použít, aniž by to způsobilo problémy.
V Reactu můžeme přidat ref
atribut k prvku a přistupovat k němu přímo v DOM.
Příklad:
Použijte useRef
k zaměření vstupu:
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'));
Sledování změn stavu
useRef
Hook lze také použít ke sledování předchozích hodnot stavu .
Je to proto, že jsme schopni zachovat useRef
hodnoty mezi rendery.
Příklad:
Použijte useRef
ke sledování předchozích hodnot stavu:
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'));
Tentokrát použijeme kombinaci useState
, useEffect
, a useRef
ke sledování předchozího stavu.
V useEffect
, aktualizujeme useRef
aktuální hodnotu při každé inputValue
aktualizaci zadáním textu do vstupního pole.