Hướng dẫn sử dụng useEffect và useRef hiệu quả với Github Copilot
Trong phát triển ứng dụng React, hai Hook quan trọng là useEffect và useRef đóng vai trò quan trọng trong việc xử lý side effects, truy cập DOM, và tối ưu hiệu suất của ứng dụng. Việc sử dụng đúng các Hook này có thể cải thiện đáng kể tính hiệu quả và khả năng bảo trì của ứng dụng. Đồng thời, sự trợ giúp từ GitHub Copilot trong quá trình lập trình giúp tối ưu hóa việc sử dụng các Hook này, từ việc tự động hoàn thành mã cho đến việc đề xuất các mẫu code chuẩn và giúp tránh lỗi phổ biến.
Bài viết này sẽ giúp bạn hiểu rõ cách sử dụng useEffect và useRef, đồng thời hướng dẫn cách GitHub Copilot có thể hỗ trợ trong việc viết mã React hiệu quả hơn.
1. Sử Dụng useEffect trong React

1.1. Mục Đích và Cách Thức Hoạt Động của useEffect
useEffect là một hook được sử dụng để thực thi các tác vụ phụ (side effects) trong một component sau khi render. Các tác vụ phụ có thể là việc gọi API, cập nhật DOM, hoặc thực thi các logic bất đồng bộ. Thực tế, việc sử dụng useEffect giúp bạn dễ dàng quản lý các tác vụ cần thực thi ngay sau khi component được render hoặc khi một số giá trị trong component thay đổi.
Cú pháp cơ bản của useEffect là:
1.2. Cách Sử Dụng useEffect với Các Dependencies
Tùy thuộc vào cách bạn quản lý dependencies (mảng các giá trị mà useEffect sẽ theo dõi), useEffect sẽ có những cách thức hoạt động khác nhau:
Không Có Dependencies (Chạy Sau Mỗi Render)
Nếu bạn không cung cấp mảng dependencies, useEffect sẽ được gọi sau mỗi lần render, dù là render lần đầu hay các lần cập nhật sau đó.
Mảng Rỗng (Chạy Khi Component Mount)
Khi bạn cung cấp một mảng rỗng như một dependencies array, useEffect chỉ được gọi một lần khi component được mount (tương đương với componentDidMount trong class components).
Có Dependencies (Chạy Khi Dependencies Thay Đổi)
Nếu bạn cung cấp một mảng chứa các dependencies, useEffect chỉ được gọi khi một trong các giá trị trong mảng thay đổi.
1.3. Ví Dụ Thực Tế: Gọi API và Cập Nhật State
Một trong những ứng dụng phổ biến nhất của useEffect là gọi API để lấy dữ liệu và cập nhật state sau khi nhận được dữ liệu. Hãy xem một ví dụ cơ bản dưới đây:
import React, { useState, useEffect } from “react”;
const UserList = () => {
const [users, setUsers] = useState([]);
useEffect(() => {
fetch(“https://api.example.com/users”)
.then(response => response.json())
.then(data => setUsers(data))
.catch(error => console.error(“Error fetching users:”, error));
}, []); // Chạy một lần khi component mount
return (
<div>
<h1>User List</h1>
<ul>
{users.map(user => (
<li key={user.id}>{user.name}</li>
))}
</ul>
</div>
);
};
export default UserList;
Trong ví dụ này, useEffect được sử dụng để gọi API lấy danh sách người dùng khi component UserList được render lần đầu tiên. Sau khi nhận được dữ liệu, state users được cập nhật và component sẽ render lại để hiển thị danh sách người dùng.
2. Sử Dụng useRef trong React

Hướng dẫn sử dụng useEffect và useRef hiệu quả với Github Copilot
2.1. Mục Đích và Cách Thức Hoạt Động của useRef
useRef là một hook trong React cho phép bạn tạo một tham chiếu (reference) đến một phần tử DOM hoặc một giá trị không cần gây re-render khi thay đổi. Điều này rất hữu ích khi bạn cần thao tác trực tiếp với DOM hoặc lưu trữ một giá trị mà không cần phải làm lại render của component.
Cú pháp cơ bản của useRef là:
Bạn có thể sử dụng myRef.current để truy cập giá trị của ref, nếu đó là phần tử DOM, hoặc giá trị bạn đã gán ban đầu.
2.2. Truy Cập DOM Với useRef
Một trong những tính năng phổ biến nhất của useRef là truy cập các phần tử DOM trực tiếp. Ví dụ, bạn có thể sử dụng useRef để lấy tham chiếu đến một input field và tự động focus vào trường đó khi component được render lần đầu tiên.
import React, { useRef, useEffect } from “react”;
const FocusInput = () => {
const inputRef = useRef(null);
useEffect(() => {
inputRef.current.focus(); // Đặt focus vào input khi component mount
}, []);
return <input ref={inputRef} type=”text” />;
};
export default FocusInput;
Trong ví dụ trên, useRef được sử dụng để tạo một tham chiếu đến input field. Khi component được mount, useEffect được gọi để tự động focus vào trường input.
2.3. Giữ Giá Trị Không Thay Đổi Qua Các Lần Render
Điều quan trọng cần lưu ý khi sử dụng useRef là giá trị lưu trong ref không gây re-render khi thay đổi. Điều này giúp bạn lưu trữ các giá trị mà không ảnh hưởng đến hiệu suất của ứng dụng.
Ví dụ, bạn có thể sử dụng useRef để theo dõi số lần mà một button được nhấn mà không cần phải trigger lại render:
import React, { useRef } from “react”;
const ButtonClickCounter = () => {
const clickCount = useRef(0);
const handleClick = () => {
clickCount.current += 1;
console.log(`Button clicked ${clickCount.current} times`);
};
return <button onClick={handleClick}>Click me</button>;
};
export default ButtonClickCounter;
3. GitHub Copilot Hỗ Trợ Viết Mã React Hiệu Quả

3.1. Tự Động Hoàn Thành Cú Pháp
Một trong những tính năng mạnh mẽ của GitHub Copilot là khả năng tự động hoàn thành cú pháp, giúp bạn tiết kiệm thời gian khi viết mã. Ví dụ, khi bạn bắt đầu gõ useEffect hoặc useRef, Copilot sẽ đề xuất mã hoàn chỉnh với các mẫu sử dụng phổ biến.
3.2. Đề Xuất Mẫu Code Phổ Biến
GitHub Copilot có thể đề xuất các mẫu code phổ biến như gọi API, focus input, hoặc cuộn đến một phần tử. Điều này giúp bạn không phải tự tạo lại các đoạn mã lặp đi lặp lại và giảm thiểu khả năng sai sót.
3.3. Tối Ưu Dependencies Array
Khi sử dụng useEffect, việc thiết lập dependencies array đúng cách là rất quan trọng để tránh các bug và cải thiện hiệu suất. GitHub Copilot có thể gợi ý cách tối ưu mảng dependencies, giúp bạn tránh được các vấn đề như vòng lặp vô hạn hoặc gọi API không cần thiết.
Việc sử dụng useEffect và useRef đúng cách sẽ giúp bạn tối ưu hóa ứng dụng React của mình về cả hiệu suất và khả năng bảo trì. Những Hook này không chỉ giúp bạn xử lý các side effects và truy cập DOM, mà còn là công cụ quan trọng trong việc xây dựng các ứng dụng React mạnh mẽ và linh hoạt.
Với sự trợ giúp của GitHub Copilot, việc phát triển ứng dụng React trở nên dễ dàng và nhanh chóng hơn. Copilot giúp bạn tự động hoàn thành cú pháp, đề xuất các mẫu code hữu ích, và tối ưu hóa mã nguồn, giúp bạn viết code sạch và hiệu quả hơn. Hãy thử tích hợp GitHub Copilot vào quá trình phát triển của bạn và cảm nhận sự khác biệt trong năng suất lập trình.
Đừng quên theo dõi CodeNhanh để cập nhật các thông tin mới nhất về lập trình, khóa học lập trình cùng AI hỗ trợ. Truy cập Tại đây để xem thông tin chi tiết.
Địa chỉ: Trung tâm CodeNhanh – Tầng 5 tòa nhà Diamond Flower – số 1 Hoàng Đạo Thúy, Thanh Xuân, Hà Nội
SĐT: Ms Nga – 0968089175 , Ms Diệu – 0332026803 (zalo / call)