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