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 手稿》

相關文章
相關標籤/搜索