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的作用
