How can the useEffect hook be optimized for cleanup actions?

4 phương ánCó giải thích

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "By manually removing event listeners". Theo tài liệu React, Effect dọn dẹp bằng cách trả về một hàm cleanup; React gọi hàm này trước mỗi lần Effect chạy lại và khi component unmount, và việc cần làm bên trong là gỡ đúng thứ Effect đã gắn, ví dụ gọi removeEventListener cho listener đã thêm bằng addEventListener, hủy timer hay ngắt kết nối. Cách chuẩn nhất là trả về một hàm cleanup trong đó gỡ listener, nhưng câu không có phương án ấy, nên gỡ listener thủ công là phương án gần nhất với việc dọn dẹp thật sự. Phương án "By passing an empty array as the second argument" hay bị chọn nhầm: mảng phụ thuộc rỗng chỉ quyết định Effect chạy một lần lúc mount và cleanup chạy lúc unmount, tức quyết định thời điểm, còn bản thân nó không dọn dẹp gì; thiếu hàm cleanup thì listener vẫn rò rỉ. Phương án "By using a class-based component" đi ngược hướng hook, vì class dọn dẹp trong componentWillUnmount chứ không dùng useEffect. Phương án "By calling it after every render" là hành vi mặc định khi bỏ mảng phụ thuộc, làm Effect và cleanup chạy dày hơn chứ không tối ưu gì.

Cùng phần 6

Xuất hiện trong 2 bộ đề