React.memo

介绍React.memo以前,先了解一下React.ComponentReact.PureComponentgit

React.Component

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.PureComponentReact.Component相似,都是定义一个组件类。不一样是React.Component没有实现shouldComponentUpdate(),而 React.PureComponent经过propsstate的浅比较实现了。对象

若是组件的propsstate相同时,render的内容也一致,那么就能够使用React.PureComponent了,这样能够提升组件的性能。继承

例如:jsx

class Welcome extends React.PureComponent {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}
当props和state中有复杂数据结果时,很差使用 PureComponent

React.memo

React.memo是一个高阶组件,相似于React.PureComponent,不一样于React.memofunction组件,React.PureComponentclass组件。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 手稿》

相关文章
相关标签/搜索