1. PureComponent适用于展示型组件
    2. PureComponent在渲染前会进行浅比较,即比较props和state,来实现shouldComponentUpdate的效果。
    3. shouldComponentUpdate 用在component中,如果出现不想在某些情况下渲染,用它来实现比较。用在PureCommonent中是无效的,因为PureCommonent自己本来会进行浅比较操作。
    4. 如果组件继承自PureComponent,首次会执行constructor和render,二次执行操作,看数据操作类型:
      1):数组或对象,引用不同,才会render,
      eg: this.setState({ array }); × this.setState({ array: […array, 2] }); √
    5. PureCommonent 的影响:
      1):父组件继承自PureCommonent,子组件继承自commonent,二次执行,不渲染,因为父组件的属性引用无变化,子组件接受的属性也无变化。
      2):父组件继承自PureCommonent, 子组件继承自PureCommonent,二次操作不render,父组件在比较时已经阻止了此操作。
      3):父组件继承自commonent,子组件继承自PureCommonent,如果引用发生变化,则父子组件render;如果引用不变化,则子组件不render。
      4):父组件继承自commonent,子组件继承自commonent,则父子组件均render。
    1. PureCommonent 的影响:
    2. //父组件
    3. import React, { PureComponent, Component } from 'react';
    4. import Example from "../components/Example";
    5. class IndexPage extends PureComponent{
    6. constructor() {
    7. super();
    8. this.state = {
    9. person: {
    10. name: 'sxt'
    11. }
    12. };
    13. console.log('constructor');
    14. }
    15. changeState = () => {
    16. let { person } = this.state;
    17. person.name = 'sxt2';
    18. this.setState({
    19. person
    20. })
    21. };
    22. render() {
    23. console.log('IndexPage render');
    24. const { person } = this.state;
    25. return (
    26. <div>
    27. <button onClick={this.changeState}>点击</button>
    28. <Example person={person} />
    29. </div>
    30. );
    31. }
    32. }
    33. //子组件
    34. import React, { Component } from 'react';
    35. class Example extends Component {
    36. render() {
    37. console.log('example render');
    38. const { person } = this.props;
    39. return(
    40. <div>
    41. {person.name}
    42. </div>
    43. );
    44. }
    45. }