类组件中防止函数重新渲染

31 阅读1分钟

类中

import { PureComponent, useState } from 'react';
import ReactDOM from 'react-dom';

class Child extends PureComponent {
  name = () => {
    console.log('name');
  };
  render() {
    console.log('sub renders');
    return <div>child</div>;
  }
}

class Father extends React.Component {
  constructor() {
    super();
    this.state = {
      count: 0,
    };
  }

  //这行代码可以使负组件渲染的时候自组件不用渲染,前提是子组件已经使用了pureComponent或者memo.
  name = () => {
    console.log('name');
  };
  render() {
    console.log('render');
    return (
      <div>
        {this.state.count}
        <Child name={this.name} />
        <button
          onClick={() => {
            this.setState({
              count: 1,
            });
          }}
        >
          xss 点我呀!!
        </button>
      </div>
    );
  }
}

函数

function Father() {
  console.log('render');
  const [count, setCount] = useState(0);

 //函数组件中使用肩头函数定义自组件的属性,父组件渲染的时候,都会重新生成一个函数实例属性
  const name = () => {
    console.log('name');
  };

  return (
    <div>
      {count}
      <Child name={name} />
      <button
        onClick={() => {
          setCount(count + 1);
        }}
      >
        xss 点我呀!!
      </button>
    </div>
  );
}
ReactDOM.render(<Father />, document.getElementById('root'));