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} /> } } }