Reaguj useRef
hak
useRef
Hook umożliwia utrzymywanie wartości między renderowaniami .
Może służyć do przechowywania zmiennej wartości, która nie powoduje ponownego renderowania po aktualizacji.
Może być używany do bezpośredniego dostępu do elementu DOM.
Nie powoduje ponownego renderowania
Gdybyśmy spróbowali policzyć, ile razy nasza aplikacja renderuje się za pomocą useState
hooka, zostaniemy złapani w nieskończoną pętlę, ponieważ ten hook powoduje ponowne renderowanie.
Aby tego uniknąć, możemy użyć useRef
Hooka.
Przykład:
Służy useRef
do śledzenia renderowania aplikacji.
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()
zwraca tylko jeden przedmiot. Zwraca obiekt o nazwie current
.
Kiedy inicjujemy useRef
ustawiamy wartość początkową: useRef(0)
.
To tak: const count = {current: 0}
. Możemy uzyskać dostęp do licznika za pomocą count.current
.
Uruchom to na swoim komputerze i spróbuj wpisać dane wejściowe, aby zobaczyć wzrost liczby renderowania aplikacji.
Zostać certyfikowanym!
95 $ ZAPISZ
Dostęp do elementów DOM
Ogólnie rzecz biorąc, chcemy, aby React zajmował się wszystkimi manipulacjami DOM.
Ale jest kilka przypadków, w których useRef
można go używać bez powodowania problemów.
W React możemy dodać ref
atrybut do elementu, aby uzyskać do niego dostęp bezpośrednio w DOM.
Przykład:
Użyj useRef
, aby skoncentrować dane wejściowe:
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'));
Śledzenie zmian stanu
Hook może być również useRef
używany do śledzenia poprzednich wartości stanu.
Dzieje się tak, ponieważ jesteśmy w stanie utrzymywać useRef
wartości między renderowaniami.
Przykład:
Użyj useRef
, aby śledzić poprzednie wartości stanu:
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'));
Tym razem używamy kombinacji useState
, useEffect
i , useRef
aby śledzić poprzedni stan.
W useEffect
, aktualizujemy useRef
bieżącą wartość za każdym razem, gdy inputValue
jest aktualizowana, wprowadzając tekst w polu wejściowym.