SydexaSydexa
Trang chủKhoá họcBài viết
Mọi thứ cần biết về Re-Render
Frontend

Mọi thứ cần biết về Re-Render

chiennt
|
05/11/2025
|
7 phút đọc

Bạn có từng ngồi trước màn hình, gõ vào một ô nhập input, và nhận ra rằng mỗi ký tự xuất hiện với một độ trễ khó chịu không?

Tôi đoán câu trả lời là có. Và tôi cũng đoán rằng phản ứng đầu tiên của bạn là:

"Code của tôi không có vấn đề gì mà, đọc vẫn oke mà”

Code của bạn có thể hoạt động hoàn hảo về mặt logic, nhưng khi ứng dụng lớn lên, nó sẽ càng ngày càng chậm, vậy thủ phạm chính là gì?

React re-renders - một trong những khái niệm vừa đơn giản vừa phức tạp nhất mà mọi React developer cần hiểu cực kỳ rõ

Tại sao bạn nên đào sâu về re-renders?

Để trả lời câu hỏi này, hãy tưởng tượng React như một người họa sĩ đang vẽ lại căn phòng của bạn. Mỗi lần có thay đổi - dù chỉ là di chuyển một cái ghế - họa sĩ có thể:

  • Thông minh: Chỉ vẽ lại cái ghế đó (re-render cần thiết)
  • Hơi không thông minh cho lắm: Vẽ lại toàn bộ căn phòng (re-render không cần thiết)

React rất nhanh, nhưng nếu bạn bắt nó "vẽ lại toàn bộ căn phòng" sau mỗi thay đổi nhỏ, cuối cùng người dùng sẽ thấy ứng dụng của bạn lag. Và một khi họ cảm thấy lag, trải nghiệm đã bị phá hỏng.

💡
Không phải tất cả re-renders đều xấu!

Re-render cần thiết

Có những re-render được coi là cần thiết, vì component cần cập nhật vì dữ liệu của chính nó thay đổi.

Ví dụ: Bạn gõ vào một ô input. Component quản lý state của input đó phải re-render sau mỗi ký tự để hiển thị những gì bạn vừa gõ. Đây là điều hoàn toàn bình thường và cần thiết.

Re-render không cần thiết

Đây là re-render không cần thiết - component re-render mặc dù không có dữ liệu nào liên quan đến nó thay đổi.

Ví dụ: Bạn gõ vào một input field, nhưng toàn bộ trang web - bao gồm header, footer, sidebar - đều re-render theo. Đây là lãng phí.

React được tối ưu cực kỳ tốt. Hầu hết thời gian, những re-renders không cần thiết này này xảy ra quá nhanh đến nỗi người dùng không nhận ra. NHƯNG Nếu re-renders xảy ra quá thường xuyên hay trên các component quá "nặng”. Ứng dụng sẽ bắt đầu lag, phản hồi chậm, và dự án mất dần khách hàng

Dưới đây là 5 nguyên nhân phổ biến nhất chính khiến một component re-render, hãy nhớ thuộc lòng hoặc lưu blog này lại nha


Ngoài ra nếu muốn đào sâu hơn nữa, học các kiến thức chuyên sâu hơn từ giảng viên là chuyên gia có hơn 10 năm kinh nghiệm frontend và từng là kỹ sư tại Shopee Singapo thì bạn có thể tham khảo khoá học React Nâng Cao bên dưới của Sydexa nha!

React Nâng Cao - Chuyên Sâu với Tối Ưu Hiệu Năng
Khóa học React từ cơ bản đến nâng cao với chuyên gia. Trở thành Senior React Developer với Sydexa.
SydexaSydexa Team

1. State thay đổi - Nguồn gốc của mọi re-render

Đây là nguyên nhân phổ biến và dễ hiểu nhất

Khi bạn gọi hàm thay đổi giá trị count, component chứa nó sẽ bị rerender

Và đây là nguồn gốc - của mọi re-render. Tất cả những gì xảy ra sau đây đều là hệ quả.

2. Parent Re-renders - Hiệu ứng domino

Đây là nơi mọi thứ trở nên thú vị (và đôi khi nó không vui cho lắm =)) )

💡
Hãy nhớ kỹ: Khi cha bị re-render, tất cả con của nó cũng re-render.

Re-render luôn đi "xuống" cây component (top-down). Re-render của con không bao giờ trigger re-render của cha trên cây

3. Context thay đổi - Sức mạnh đi kèm trách nhiệm

Context là một công cụ mạnh mẽ, nhưng cũng có thể là con dao hai lưỡi:

Tất cả components sử dụng Context sẽ re-render khi value thay đổi, ngay cả khi component chỉ dùng một phần của data

4. Khi Hooks thay đổi

Bất kể bạn có bao nhiêu custom hooks, tất cả đều "thuộc về" component sử dụng chúng. State hay Context thay đổi trong bất kỳ hook nào cũng sẽ khiến re-render của component chứa chúng.

5. Key Prop thay đổi

Đây là một trường hợp đặc biệt. key là một prop đặc biệt của React, không phải là prop thông thường, nó giúp React theo dõi component chứ không KHÔNG truyền vào component

Khi key prop thay đổi, React không re-render component mà thay vào đó, nó unmount component cũ và mount một component hoàn toàn mới. Khi key thay đổi, React hiểu rằng: "Đây là một component instance hoàn toàn khác nên loại bỏ cái cũ luôn".

Và điều nguy hiểm ở đây là: Unmount/remount tốn tài nguyên hơn hơn re-render bình thường. Component sẽ mất toàn bộ state, phải chạy lại tất cả logic khởi tạo, chạy lại useEffect cleanup và setup mới

Nên là trong list thì đừng dùng index làm key như này nha, sydexa đã có một video nói riêng về phần này đó

Và cuối cùng có phải là Props thay đổi gây Re-render không?

Đây là một trong những quan niệm sai lầm phổ biến nhất về React

Props thay đổi KHÔNG trực tiếp gây re-render bạn nhé

Hãy xem lại ví dụ sau:

Để count prop của Child thay đổi, Parent phải re-render trước (vì Parent quản lý state mà). Và khi Parent re-render, Child tự động re-render theo (theo quy tắc 2 mà mình vừa nói ở trên nha)

Props chỉ trở nên quan trọng khi bạn sử dụng memoization techniques như React.memo() , useMemo(), useCallback(). Khi đó, React mới so sánh props cũ và mới để quyết định có cần re-render hay không.


Re-renders không phải là kẻ thù. Chúng là cách React cập nhật UI để phản ánh state mới. Vấn đề chỉ nằm ở những re-renders không cần thiết xảy ra quá nhiều hoặc trên components quá nặng

Hãy thuộc nằm lòng 5 quy tắc trên để cải thiện chất lượng dự án của anh em nha

Ngoài ra nếu muốn đào sâu hơn nữa, học các kiến thức chuyên sâu thực tiễn hơn từ giảng viên là chuyên gia có hơn 10 năm kinh nghiệm frontend và từng là kỹ sư tại Shopee Singapo thì bạn có thể tham khảo khoá học React Nâng Cao bên dưới của Sydexa nha!

React Nâng Cao - Chuyên Sâu với Tối Ưu Hiệu Năng
Khóa học React từ cơ bản đến nâng cao với chuyên gia. Trở thành Senior React Developer với Sydexa.
SydexaSydexa Team

Bài viết liên quan

Đừng đổ lỗi cho tối ưu hiệu năng nữa: Ứng dụng của bạn giật lag, có thể là do thiết kế sản phẩm quá tệ
Frontend
17/03/2026 · 8 phút đọc

Đừng đổ lỗi cho tối ưu hiệu năng nữa: Ứng dụng của bạn giật lag, có thể là do thiết kế sản phẩm quá tệ

Chắc hẳn mỗi khi chúng ta code xong một trang web và deploy lên production thì có một điều chúng ta khá quan tâm là Tối ưu hiệu năng (Performance Optimization). Trên mạng có nhiều bài viết chứa những thuật ngữ nghe rất đao to búa lớn: * Sử dụng Virtual List (danh sách ảo) để tối ưu việc render danh sách dài... * Sử dụng Web Worker để đẩy các tính toán phức tạp ra khỏi luồng chính (main thread)... * Sử dụng WASM để viết lại thuật toán lõi... Sau khi viết vài bài về tối ưu hiệu năng, cũng nh

Chi tiết bài viết
Chuyện gì thực sự xảy ra ở trình duyệt sau khi nhấn F5?
Frontend
11/03/2026 · 11 phút đọc

Chuyện gì thực sự xảy ra ở trình duyệt sau khi nhấn F5?

Trong lập trình frontend, "làm mới trang" trông có vẻ là một thao tác đơn giản, nhưng ẩn sau đó là một luồng phối hợp phức tạp giữa giao tiếp mạng (network communication), chiến lược cache (caching strategy) và engine render (rendering engine). Đặc biệt là khi nhấn F5, nó không phải là "tải lại hoàn toàn", cũng không phải là "dùng trực tiếp cache ở local", mà là một cơ chế xác thực thông minh nằm giữa hai trạng thái này. Để thực sự làm chủ các kỹ năng tối ưu hóa hiệu năng và debug frontend, bạn

Chi tiết bài viết
Server DTO: Nên giữ nguyên hay chuyển đổi?
Frontend
04/03/2026 · 12 phút đọc

Server DTO: Nên giữ nguyên hay chuyển đổi?

Trong các dự án mà Backend và Frontend được phát triển hoàn toàn tách biệt, chắc hẳn không ít lần chúng ta phải đau đầu với câu hỏi: "Dữ liệu server trả về thì nên xài luôn hay phải xào nấu lại?". Nếu dạo quanh các diễn đàn công nghệ hay đọc các bài thảo luận trên mạng, bạn sẽ thấy cuộc tranh luận về cách xử lý dữ liệu từ API này dường như chưa bao giờ có hồi kết. Cốt lõi của vấn đề luôn xoay quanh hai luồng quan điểm cực kỳ quen thuộc: "Dữ liệu backend trả về sao thì cứ tận dụng nguyên xi như

Chi tiết bài viết
Đừng lạm dụng useMemo nữa! Đây mới là Best Practice chuẩn xác dành cho bạn
Frontend
25/02/2026 · 12 phút đọc

Đừng lạm dụng useMemo nữa! Đây mới là Best Practice chuẩn xác dành cho bạn

useMemo là một React Hook giúp chúng ta ghi nhớ kết quả tính toán giữa các lần render để tối ưu hiệu năng trong một số trường hợp. Tuy nhiên, có một thực trạng đang diễn ra: người không biết thì chẳng bao giờ dùng, còn người đã biết thì lại lạm dụng nó ở mọi lúc, mọi nơi. Bài viết này sẽ giúp bạn hiểu rõ thực sự thì trong những trường hợp nào chúng ta mới nên sử dụng useMemo. Cú pháp tổng quát: useMemo hoạt động như thế nào? Ở lần render đầu tiên, useMemo sẽ thực thi hàm calculateValue (khôn

Chi tiết bài viết
Sydexa
Sydexa
SydexaSydexa

Nền tảng học lập trình với animation trực quan và bài tập tương tác, giúp bạn hiểu sâu thay vì chỉ đọc lý thuyết.

Sydexa FanpageBackend GroupFrontend Group

We learn, We share, We grow

Powered By
Cộng đồng System Design Việt Nam

contact@sydexa.com
0971489013