zoukankan      html  css  js  c++  java
  • React生命周期-改善程序性能

    Xiao.jx存在性能问题

    是的,Xiao.js组件已经写的很熟悉了,但是它有一个性能问题,我一直没告诉你,那就是子组件XiaoItem频繁无用渲染render。如何能看出这个问题的那?

    首先你要确认你安装了React Developer Tools 如果你没有安装,可以到前边的课程学习一下安装。有了这个浏览器插件,就可以在控制台中找到React标签,然后在右边点开设置,选中highlight Updates

    这时候你在浏览器的文本框中输入一下内容,你可以清楚的看到子组件也发生了重新render的情况。

    有很多程序员会忽略这样的性能损耗,认为没有什么大不了的,但是软件的卡顿是一点点产生的,所以必须要减少性能损耗。

    可以在XiaoItem.jsrender函数里加入下面的代码,更直观的看到这个问题。

    render() { 
        console.log('child-render')
        return ( 
            <div onClick={this.handleClick}>
                {this.props.avname}为你做- {this.props.content}
            </div>
        );
    }

    利用shouldComponentUpdate解决

    这个问题看似很小,但是当你页面很复杂时,足以影响用户体验,不要骗自己了。其实用shouldComponentUpdate函数就可以简单的解决调这个问题。

    直接再XiaoItem.js中加入下面的代码:

    shouldComponentUpdate(){
        return false;
    }

    这时候在浏览器中查看,问题已经没有了。但是这样做太暴力了,否定了所有的东西,那如果在真实项目中,需要改变值属性值,达到渲染就没办法了。所以我们可以更优雅一下,写出下面的代码。

    shouldComponentUpdate有两个参数:

    • nextProps:变化后的属性;
    • nextState:变化后的状态;
    shouldComponentUpdate(nextProps,nextState){
        if(nextProps.content !== this.props.content){
            return true
        }else{
            return false
        }
    
    }

    只要输入框内容有变化,就执行true

    现在的代码就优雅一些了,也不那么暴力了。这就算是完美解决了子组件的渲染性能问题,你写的代码质量也得到了提高。其实在面试React让写TODOList应用的,都是看这个来区分等级的,能写出来的,这算普通程序员;能写出来并作性能优化的,这算有经验的程序员。

  • 相关阅读:
    下一个ajax异步请求被挂起问题
    借鉴别人的Oracle 11g安装和卸载图文教程
    Html5 实现网页截屏 页面生成图片(图文)
    Oracle修改字段类型方法小技巧
    基于轻量级ORM框架Dapper的扩展说明
    JavaScript+html5 canvas实现本地截图教程
    SkipList跳表基本原理
    Oracle日期查询:季度、月份、星期等时间信息
    设计模式之模板模式
    设计模式之解释器模式
  • 原文地址:https://www.cnblogs.com/GumpYan/p/13211540.html
Copyright © 2011-2022 走看看