React.memo
2066 ワード
React.memo
を紹介する前に、React.Component
とReact.PureComponent
について説明します.React.Component
React.Component
は、ES 6 class
に基づくReactコンポーネントである.Reactは、コンポーネントとして
class
またはfunction
を定義ことを可能にする、コンポーネントクラスを定義するには、React.Component
を継承する必要がある.例:
class Welcome extends React.Component {
render() {
return Hello, {this.props.name};
}
}
注意:
React.Component
を継承するReactコンポーネントクラスでは、render()
が必須メソッドであり、その他はオプションです.React.PureComponent
React.PureComponent
とReact.Component
は同様であり、いずれもコンポーネントクラスを定義している.異なる点は、React.Component
はshouldComponentUpdate()
を達成しなかったが、React.PureComponent
はprops
とstate
の浅い比較によって達成された.コンポーネントの
props
とstate
が同時にrender
の内容も一致すれば、React.PureComponent
を使用することができ、コンポーネントの性能を向上させることができる.例:
class Welcome extends React.PureComponent {
render() {
return Hello, {this.props.name};
}
}
propsやstateに複雑なデータ結果がある場合、使いにくい
PureComponent
. React.memo
React.memo
は、React.PureComponent
と同様の高次コンポーネントであり、React.memo
とは異なりfunction
コンポーネントであり、React.PureComponent
はclass
コンポーネントである.例:
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);
この方法はV 16である.6.0サポート
『React原稿』のお勧め