PurComponent和Component的區(qū)別

區(qū)別點:

  1. 前者自帶通過props和state的淺對比來實現(xiàn) shouldComponentUpate(),而后者沒有,只要props變化都會render;

PureComponent缺點

  1. 可能會因深層的數(shù)據(jù)不一致而產(chǎn)生錯誤的否定判斷,從而shouldComponentUpdate結果返回false,界面得不到更新。

PureComponent優(yōu)勢

  1. 不需要開發(fā)者自己實現(xiàn)shouldComponentUpdate,就可以進行簡單的判斷來提升性能。

為什么PureComponent比較復雜的數(shù)據(jù)結構,可能會因深層的數(shù)據(jù)不一致而產(chǎn)生錯誤的否定判斷?

JavaScript 中的對象一般是可變的(Mutable),因為使用了引用賦值,新的對象簡單的引用了原始對象,改變新的對象將影響到原始對象。如 foo={a: 1}; bar=foo; bar.a=2 你會發(fā)現(xiàn)此時 foo.a 也被改成了 2。

  • 為了解決這個問題,一般的做法是使用 shallowCopy(淺拷)deepCopy(深拷貝)來避免被修改,但這樣做造成了 CPU 和內(nèi)存的浪費。
    例如:
let foo = {a: {b: 1}};
let bar = foo;
bar.a.b = 2;
console.log(foo.a.b);  // 打印 2
console.log(foo === bar); // 打印 true

如果要使用PurComponent的話,如何避免不會render的問題?

  1. 避免使用值可能會突變的屬性或狀態(tài),而是使用副本來返回新的變量。
  2. 另外一種方式是使用Immutable.js

提示

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容