Class 10: UseRef và thao tác với DOM

useRef là gì?

useRef là một hook trong React được dùng để tạo ra một tham chiếu (reference) có thể lưu giữ giá trị hoặc tham chiếu đến một phần tử DOM mà không gây re-render khi giá trị thay đổi.

Cú pháp:

const myRef = useRef<GiáTrịHoặcKiểuPhầnTử>(giáTrịBanĐầu);
  • Nếu bạn truyền vào useRef(null), nó sẽ trả về một object có dạng { current: null }.

  • Khi bạn gán ref={myRef} vào một phần tử JSX, myRef.current sẽ trỏ tới phần tử DOM đó sau khi render.


Lưu giá trị không làm re-render

Một điểm quan trọng của useRefthay đổi giá trị current sẽ không làm component bị re-render (khác với useState).

Ví dụ:

'use client';

import { useRef, useState } from 'react';

export default function RefCounter() {
  const [count, setCount] = useState(0);
  const renderCount = useRef(0);

  renderCount.current += 1;

  return (
    <div>
      <p>Giá trị count: {count}</p>
      <p>Số lần render: {renderCount.current}</p>
      <button onClick={() => setCount(prev => prev + 1)}>Tăng</button>
    </div>
  );
}

Giải thích:

  • renderCount được tăng mỗi lần component render lại.

  • renderCount.current không được quản lý bởi useState, việc thay đổi giá trị không gây render lại component.


Truy cập DOM trực tiếp bằng ref

Bạn có thể dùng useRef để lấy phần tử DOM thật (giống như document.querySelector).

Ví dụ: tự động focus vào một ô input sau khi component được mount:


Cuộn đến phần tử

Bạn cũng có thể dùng useRef để cuộn đến một phần tử bất kỳ trên trang.


Bài tập thực hành

Mục tiêu

Áp dụng useRef để:

  • Focus tự động vào input khi component được render.

  • Đếm số lần render mà không làm component re-render.

  • Cuộn mượt đến một phần tử cụ thể khi nhấn nút.

Đề bài

Tạo một component tên là RefPractice với các chức năng:

  1. Có một ô input và khi trang load sẽ tự động focus vào ô đó.

  2. Có một nút "Tăng" để tăng một biến count sử dụng useState.

  3. Hiển thị số lần render bằng useRef.

  4. Có một khối nội dung nằm phía dưới và một nút "Cuộn xuống" để cuộn đến khối đó.

Gợi ý code mẫu


Kết luận

  • useRef là công cụ cực kỳ mạnh trong React để giữ lại giá trị hoặc thao tác trực tiếp với DOM mà không gây re-render.

  • Thường dùng useRef để:

    • Focus input.

    • Scroll đến phần tử.

    • Đếm render hoặc lưu giá trị cũ.

Last updated