介绍React.memo
以前,先了解一下React.Component
和React.PureComponent
。git
React.Component
是基于ES6 class
的React组件。github
React容许定义一个class
或者function
做为组件,那么定义一个组件类,就须要继承React.Component
.性能
例如:this
class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } }
注意:继承React.Component
的React组件类中,render()
为必须方法,其余都为可选。code
React.PureComponent
和 React.Component
相似,都是定义一个组件类。不一样是React.Component
没有实现shouldComponentUpdate()
,而 React.PureComponent
经过props
和state
的浅比较实现了。对象
若是组件的props
和state
相同时,render
的内容也一致,那么就能够使用React.PureComponent
了,这样能够提升组件的性能。继承
例如:jsx
class Welcome extends React.PureComponent { render() { return <h1>Hello, {this.props.name}</h1>; } }
当props和state中有复杂数据结果时,很差使用
PureComponent
。
React.memo
是一个高阶组件,相似于React.PureComponent
,不一样于React.memo
是function
组件,React.PureComponent
是class
组件。get
示例:it
const MyComponent = React.memo(props => { /* render using props */ return ( ); });
这种方式依然是一种对象的浅比较,有复杂对象时没法render
。在React.memo
中能够自定义其比较方法的实现。
例如:
function MyComponent(props) { /* render using props */ } function areEqual(prevProps, nextProps) { /* return true if passing nextProps to render would return the same result as passing prevProps to render, otherwise return false */ } export default React.memo(MyComponent, areEqual);
该方法在V16.6.0才支持
推荐阅读《React 手稿》