Sự khác biệt chính, như tôi thấy, là một rerenders thành phần mỗi khi rerenders cha mẹ của nó, bất kể đạo cụ và trạng thái của thành phần đã thay đổi.
Mặt khác, một thành phần thuần túy sẽ không tái xuất hiện nếu các rerender mẹ của nó, trừ khi các đạo cụ (hoặc trạng thái) của thành phần thuần túy đã thay đổi.
Ví dụ: giả sử rằng chúng ta có một cây thành phần với hệ thống phân cấp ba cấp: cha mẹ, con cái và cháu.
Khi đạo cụ của cha mẹ được thay đổi theo cách mà đạo cụ chỉ có một đứa trẻ được thay đổi, thì:
- nếu tất cả các thành phần là các thành phần thông thường, thì toàn bộ cây thành phần sẽ chạy lại
- nếu tất cả con cháu là thành phần thuần túy, thì chỉ có một đứa trẻ sẽ tái xuất hiện, và một hoặc tất cả các cháu của nó, tùy thuộc vào việc đạo cụ của chúng có bị thay đổi hay không. Nếu có nhiều thành phần trong cây thành phần này, nó có thể có nghĩa là tăng hiệu suất đáng kể.
Tuy nhiên, đôi khi, sử dụng các thành phần tinh khiết sẽ không có bất kỳ tác động nào. Tôi đã gặp trường hợp như vậy khi phụ huynh nhận được đạo cụ từ cửa hàng redux và cần thực hiện một phép tính phức tạp về đạo cụ cho con. Cha mẹ đã sử dụng một danh sách phẳng để kết xuất con của nó.
Kết quả là mỗi khi có một thay đổi nhỏ trong cửa hàng redux, toàn bộ mảng danh sách phẳng dữ liệu của trẻ em đã được tính toán lại. Điều này có nghĩa là đối với mọi thành phần trong cây, đạo cụ là các đối tượng mới, ngay cả khi các giá trị không thay đổi.
Trong trường hợp này, các thành phần thuần túy không giúp ích gì và chỉ có thể đạt được hiệu suất tăng bằng cách sử dụng các thành phần thông thường và kiểm tra ở trẻ em, trong ShouldComponentUpdate, nếu cần phải đăng ký lại.