React useRef
Hook
useRef
Hook cho phép bạn duy trì các giá trị giữa các lần hiển thị .
Nó có thể được sử dụng để lưu trữ một giá trị có thể thay đổi mà không gây ra kết xuất lại khi được cập nhật.
Nó có thể được sử dụng để truy cập trực tiếp vào một phần tử DOM.
Không gây ra kết xuất lại
Nếu chúng tôi cố gắng đếm số lần ứng dụng của chúng tôi hiển thị bằng useState
Hook, chúng tôi sẽ bị mắc vào một vòng lặp vô hạn vì chính Hook này gây ra kết xuất lại.
Để tránh điều này, chúng ta có thể sử dụng useRef
Hook.
Thí dụ:
Sử dụng useRef
để theo dõi kết xuất ứng dụng.
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()
chỉ trả lại một mặt hàng. Nó trả về một Đối tượng được gọi current
.
Khi chúng tôi khởi tạo , chúng tôi đặt giá trị ban đầu useRef
:.useRef(0)
Nó giống như làm điều này const count = {current: 0}
:. Chúng tôi có thể truy cập số lượng bằng cách sử dụng count.current
.
Chạy phần này trên máy tính của bạn và thử nhập dữ liệu đầu vào để xem số lần hiển thị ứng dụng tăng lên.
Được chứng nhận!
$ 95 GHI DANH
Truy cập các phần tử DOM
Nói chung, chúng tôi muốn để React xử lý tất cả các thao tác DOM.
Nhưng có một số trường hợp useRef
có thể được sử dụng mà không gây ra sự cố.
Trong React, chúng ta có thể thêm một ref
thuộc tính vào một phần tử để truy cập nó trực tiếp trong DOM.
Thí dụ:
Sử dụng useRef
để tập trung đầu vào:
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'));
Theo dõi các thay đổi trạng thái
useRef
Hook cũng có thể được sử dụng để theo dõi các giá trị trạng thái trước đó .
Điều này là do chúng tôi có thể duy trì useRef
các giá trị giữa các lần hiển thị.
Thí dụ:
Sử dụng useRef
để theo dõi các giá trị trạng thái trước đó:
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'));
useState
Lần này chúng tôi sử dụng kết hợp useEffect
và useRef
để theo dõi trạng thái trước đó.
Trong useEffect
, chúng tôi đang cập nhật useRef
giá trị hiện tại mỗi khi giá trị inputValue
được cập nhật bằng cách nhập văn bản vào trường đầu vào.