Component
和PureComponent
最大的不一样是PureComponent
经过shouldComponentUpdate()
来比较prop
和state
的新旧值,从而决定是是否更新组件,固然这里的比较是浅比较(shallowEqual
),这里贴一段实现PureComponent
的代码:react
import React, { Component } from 'react' export default class PureComponent extends Component { shouldComponentUpdate(nextProps, nextState) { return ( !shallowEqual(this.props, nextProps) || !shallowEqual(this.state, nextState) ) } } function shallowEqual(obj1, obj2) { if (obj1 === obj2) return true if ( obj1 === null || obj2 === null || typeof obj1 !== 'object' || typeof obj2 !== 'object' ) { return false } let keys1 = Object.keys(obj1) let keys2 = Object.keys(obj2) if (keys1.length !== keys2.length) return false for (let name of keys1) { if (!obj2.hasOwnProperty(name) || obj1[name] != obj2[name]) { return false } } return true }
函数组件也能够用React.memo
实现PureComponent
的效果:数组
function memo(FunComp){ return class extends React.PureComponent{ render(){ return <FunComp {...this.props} /> } } }