项目的优化方案 immutable实战
优化方案一:PureComponent (memo)进行浅层比较
function shallowEqual(objA: mixed, objB: mixed): boolean {
// 下面的 is 相当于 === ,只是对 + 0 和 - 0,以及 NaN 和 NaN 的情况进行了特殊处理
// 第一关:基础数据类型直接比较出结果
if (is (objA, objB)) {
return true;
}
// 第二关:只要有一个不是对象数据类型就返回 false
if (
typeof objA !== 'object' ||
objA === null ||
typeof objB !== 'object' ||
objB === null
) {
return false;
}
// 第三关:在这里已经可以保证两个都是对象数据类型,比较两者的属性类型
const KeysA = Object.keys(objA);
const KeysB = Object.keys(objB);
if (KeysA.length !== KeysB.length) {
return false;
}
// 第四关;比较两者的属性是否相等,值是否相等
for (let i = 0; i < KeysA.length; i++) {
if (
!hasOwnProperty.call(objB, KeysA[i]) ||
!is (objA [KeysA [i]], objB [KeysA[i]])
) {
return false;
}
}
return true;
}优化方案二:shouldComponentUpdate 中进行深层对比
优化方案三:immutable 数据类型 + SCU (memo) 浅层对比
什么是 immutable 数据?有什么优势?

项目中涉及的 immutable 方法
最后更新于