react 随机数案例 组件不必要的更新
实现方式一:shouldComponentUpdate
注:
shouldComponentUpdate会在render生命周期前执行,
必须返回一个布尔值,返回true更新,返回false不更新,
有两个参数,弟一个参数是最新的props弟二个是最新的state
代码:
import React from react;
import ReactDOM from react-dom/client;
class Demo extends React.Component {
  state = {
    num: 1
  }
  render() {
    return (
      <div>
        <h1>随机数</h1>
        <button onClick={this.handlerClick} >随机</button>
        <Children num={this.state.num}></Children>
      </div>
    )
  }
  handlerClick = () => {
    this.setState({ num: parseInt(Math.random() * 3) })
  }
}
class Children extends React.Component {
  shouldComponentUpdate(newProps,newState){
    // shouldComponentUpdate必须返回一个布尔值,返回true更新,返回false不更新,有两个参数,弟一个参数是最新的props弟二个是最新的state
    console.log("更新前",newProps,this.props.num);
    return newProps.num !== this.props.num
  }
  render() {
    console.log("更新了");
    return (
      <div>
        <div>{this.props.num}</div>
      </div>
    )
  }
}
ReactDOM.createRoot(document.getElementById("root")).render(<Demo />)  
实现方式二:PureComponent
注:
PureComponent是一个纯组件,它内部自行执行了state和props的对比,来确定要不要更新
它的对比的浅对比,对象是地址,不发生改变就不会更新,所以在更改state中的对象时,可以{...}深克隆,然后在更改
代码:
import React from react;
import ReactDOM from react-dom/client;
class Demo extends React.Component {
  state = {
    num: 1
  }
  render() {
    return (
      <div>
        <h1>随机数</h1>
        <button onClick={this.handlerClick} >随机</button>
        <Children num={this.state.num}></Children>
      </div>
    )
  }
  handlerClick = () => {
    this.setState({ num: parseInt(Math.random() * 3) })
  }
}
class Children extends React.PureComponent {
  
  render() {
    console.log("更新了");
    return (
      <div>
        <div>{this.props.num}</div>
      </div>
    )
  }
}
ReactDOM.createRoot(document.getElementById("root")).render(<Demo />)
				       
			          上一篇:
			            通过多线程提高代码的执行效率例子 
			          
			          下一篇:
			            Idea中侧栏Ant build的作用 
			          
			        
