React类组件性能优化之shouldComponentUpdate、React.PureComponent

前言

这两个性能优化方法是对与类组件来说的。有些时候我们setState时,状态值并没有改变,但是相关的组件还是渲染了。比如如下代码的执行

class Test extends React.Component {
    state = {
        value:0
    }
    componentWillUpdate() {
        console.log('Test 渲染了')
    }
    render() {
        return <div>
            {this.state.value}
            <button onClick={()=>{this.setState({value:1})}}>changeValue</button>
             <Testson />
        </div>
    }
}
class Testson extends React.Component {
    componentWillUpdate() {
        console.log('Testson 渲染了')
    }
    render() {
        return <p>76485768</p>
    }
}

点击changeValue后会渲染一次,因为state的状态值改变了。组件会重新渲染。这时value的值为1。但是我们再点一次changeValue时,state的值并没有改变,还是1。组件渲染了。
在这里插入图片描述
为了提升性能,我们应该避免不必要的渲染。

shouldComponentUpdate

  • nextProps: 组件将会接收的下一个参数props
  • nextProps: 组件的下一个状态state
shouldComponentUpdate(nextProps, nextState) {
    return true        
}

返回true时组件会渲染,如果时false则不会渲染;
以上的组件可以这样优化

class Test extends React.Component {
    state = {
        value:0
    }
    componentWillUpdate() {
        console.log('Test 渲染了')
    }
    shouldComponentUpdate(nextProps,nextState) {
        if(this.state.value === nextState.value){
            return false
        }else{
            return true
        }
    }
    render() {
        return <div>
            {this.state.value}
            <button onClick={()=>{this.setState({value:1})}}>changeValue</button>
             <Testson />
        </div>
    }
}

这样就不会多次渲染了
在这里插入图片描述

React.PureComponent

这个相对于的是react函数组件的React.memo()的性能优化。

class Test extends React.PureComponent {
    state = {
        value:0
    }
    componentWillUpdate() {
        console.log('Test 渲染了')
    }
    // shouldComponentUpdate(nextProps,nextState) {
    //     if(this.state.value === nextState.value){
    //         return false
    //     }else{
    //         return true
    //     }
    // }
    render() {
        return <div>
            {this.state.value}
            <button onClick={()=>{this.setState({value:1})}}>changeValue</button>
             <Testson />
        </div>
    }
}

使用React.PureComponent的效果和shouldComponentUpdate的效果一样。都是状态不改变,不会重复渲染。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值