Class 06: useEffect hook
useEffect – Hook theo dõi và side effect
useEffect dùng để làm gì?
useEffect là một hook của React được sử dụng để xử lý các side effects trong component. Side effects là các tác động phụ bên ngoài ngoài việc render giao diện, ví dụ như:
Gọi API lấy dữ liệu.
Đăng ký sự kiện (event listener).
Cập nhật DOM thủ công.
Khởi tạo hoặc dọn dẹp timer (setInterval, setTimeout).
Theo dõi hoặc ghi log dữ liệu khi state hoặc props thay đổi.
useEffect cho phép bạn chạy một hàm nào đó sau khi component được render (hoặc khi dependency thay đổi), không làm cản trở quá trình render UI.
Cách dùng useEffect với dependency array
Cú pháp cơ bản:
useEffect(() => {
// Code side effect
return () => {
// Cleanup (nếu cần)
};
}, [dependencies]);Tham số đầu tiên: hàm callback chạy khi component render và khi dependency thay đổi.
Tham số thứ hai: mảng
dependencieslà các biến React theo dõi. Nếu giá trị trong mảng này thay đổi, hàm callback sẽ chạy lại.Nếu không truyền dependency array, effect sẽ chạy sau mỗi lần render (gây lặp lại nhiều lần).
Nếu truyền mảng rỗng
[], effect chỉ chạy 1 lần khi component mount (tương đương componentDidMount).
Các trường hợp dùng useEffect theo dependency
[](mảng rỗng): chạy 1 lần sau khi component mount. Ví dụ: gọi API một lần hoặc đăng ký event listener.[someVar]: chạy mỗi khi biếnsomeVarthay đổi. Ví dụ: khi user nhập input, muốn theo dõi giá trị input để làm gì đó.Không truyền mảng dependency: chạy sau mỗi lần render (ít dùng vì gây hiệu suất kém).
Cleanup function trong useEffect
Khi effect tạo ra các side effect có thể tồn tại lâu (ví dụ: timer, event listener), ta cần dọn dẹp để tránh rò rỉ bộ nhớ hoặc hành vi không mong muốn.
useEffecttrả về một hàmcleanupsẽ được gọi trước khi effect chạy lại hoặc khi component unmount (gỡ bỏ).
Ví dụ cleanup:
Ví dụ thực hành chi tiết
Giải thích ví dụ
Mỗi khi nhấn nút, state
countthay đổi, effect đầu tiên chạy in ra log.Mỗi khi nhập input, state
inputValuethay đổi, effect thứ hai chạy.Khi component mount, effect thứ ba tạo timer
setIntervalchạy log mỗi giây.Khi component unmount, hàm cleanup dọn dẹp timer để không còn chạy nữa.
Bài tập thực hành
Tạo component đếm số lần click và hiển thị số lần click.
Theo dõi giá trị input text và in ra console mỗi khi thay đổi.
Tạo
setIntervalđếm ngược từ 10 đến 0, mỗi giây giảm 1. Khi đếm đến 0, dừng timer.Dùng cleanup function để dọn timer khi component unmount.
Thêm nút "Reset" để khởi động lại đếm ngược.
Last updated