0
0
Posts
SC
Stus Codejosephminhlong

Trường hợp sử dụng useEffect và useLayoutEffect như thế nào trong React?

Đăng vào 3 tháng trước

• 2 phút đọc

Chủ đề:

Reactjs

Trong React, cả useEffectuseLayoutEffect đều là các hook được sử dụng để xử lý các tác động bên ngoài (side effects) trong các component. Tuy nhiên, chúng có những điểm khác biệt quan trọng về thời điểm thực thi và cách chúng ảnh hưởng đến việc render.

Sử dụng useEffect

  • Thời điểm thực thi: useEffect được gọi sau khi component đã được render và cập nhật DOM. Điều này có nghĩa là nó không chặn quá trình render, giúp tăng hiệu suất và trải nghiệm người dùng.
  • Trường hợp sử dụng:
    • Gọi API để lấy dữ liệu.
    • Đăng ký và hủy đăng ký sự kiện (event listeners).
    • Cập nhật trạng thái dựa trên dữ liệu từ props hoặc state.
    • Thực hiện các tác động không ảnh hưởng đến layout của trang, như cập nhật tiêu đề trang hoặc xử lý các tác động bên ngoài khác.

Sử dụng useLayoutEffect

  • Thời điểm thực thi: useLayoutEffect được gọi ngay sau khi DOM đã được cập nhật nhưng trước khi trình duyệt vẽ (repaint) lại màn hình. Điều này có nghĩa là nó chặn quá trình render cho đến khi các tác động bên trong nó hoàn tất.
  • Trường hợp sử dụng:
    • Đo kích thước hoặc vị trí của các phần tử DOM (DOM measurements) để thực hiện các thay đổi ngay lập tức.
    • Cập nhật layout của component dựa trên các thay đổi trước khi trình duyệt vẽ lại.
    • Khi cần đảm bảo rằng các thay đổi về layout được thực hiện trước khi người dùng thấy chúng, như trong trường hợp của animations hoặc transitions.

So sánh giữa useEffectuseLayoutEffect

Tiêu chí useEffect useLayoutEffect
Thời điểm thực thi Sau khi render Ngay sau khi render và trước khi repaint
Ảnh hưởng đến hiệu suất Không chặn render Chặn render cho đến khi hoàn tất
Trường hợp sử dụng Tác động không ảnh hưởng đến layout Tác động ảnh hưởng đến layout

Kết luận

Việc lựa chọn giữa useEffectuseLayoutEffect phụ thuộc vào yêu cầu cụ thể của ứng dụng. Nếu bạn cần thực hiện các tác động mà không ảnh hưởng đến trải nghiệm người dùng, hãy sử dụng useEffect. Ngược lại, nếu bạn cần đảm bảo rằng các thay đổi layout được thực hiện trước khi người dùng thấy chúng, hãy chọn useLayoutEffect.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào