首页 > 编程语言 >P21:React高级-生命周期改善程序性能shouldComponentUpdate

P21:React高级-生命周期改善程序性能shouldComponentUpdate

时间:2023-02-09 12:04:09浏览次数:31  
标签:React return render 性能 shouldComponentUpdate P21 组件


React16 基础

  • ​​阐述​​
  • ​​服务组件存在性能问题​​
  • ​​利用 `shouldComponentUpdate` 解决​​

阐述

已经对React生命周期有了认识,那如何利用它提高组件的性能那?
这节课我们会讲一个通过​​​shouldComponentUpdate​​函数,改善React组件性能的例子。

服务组件存在性能问题

是的,服务组件已经写的很熟悉了,但是它有一个性能问题,我一直没告诉你,那就是子组件 ​​BeautyItem​​​ 频繁无用渲染 ​​render​​。

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

P21:React高级-生命周期改善程序性能shouldComponentUpdate_Developer


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

有很多程序员会忽略这样的性能损耗,认为没有什么大不了的,但是软件的卡顿是一点点产生的,所以必须要减少性能损耗。可以在 ​​BeautyItem.js​​ 的 render 函数里加入下面的代码,更直观的看到这个问题

render() { 
console.log("child -- render")
return (
<li onClick={this.handleClick}>
{this.props.avname}为你服务-{this.props.content}</li>
);
}

利用 shouldComponentUpdate 解决

这个问题看似很小,但是当你页面很复杂时,足以影响用户体验,不要骗自己了。

其实用 ​​shouldComponentUpdate​​函数就可以简单的解决调这个问题。

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

shouldComponentUpdate(){
return false;
}

这时候在浏览器中查看,问题已经没有了。

但是这样做太暴力了,否定了所有的东西,那如果在真实项目中,需要改变值属性值,达到渲染就没办法了。

所以我们可以更优雅一下,写出下面的代码:

​shouldComponentUpdate​​ 有两个参数:

​nextProps​​​:变化后的属性;
​​​nextState​​:变化后的状态;

shouldComponentUpdate(nextProps,nextState){
if(nextProps.content !== this.props.content){
return true
}else{
return false
}

}

现在的代码就优雅一些了,也不那么暴力了。

这就算是完美解决了子组件的渲染性能问题,你写的代码质量也得到了提高。

其实在面试React让写 ​​TODOList​​ 应用的,都是看这个来区分等级的,能写出来的,这算普通程序员;能写出来并作性能优化的,这算有经验的程序员。

P21:React高级-生命周期改善程序性能shouldComponentUpdate_代码质量_02


标签:React,return,render,性能,shouldComponentUpdate,P21,组件
From: https://blog.51cto.com/u_13571520/6046613

相关文章

  • P23:React高级-CSS3实现react显示隐藏
    React16基础​​阐述​​​​新建一个Boss组件​​​​编写业务逻辑​​​​加入CSS动画​​​​Demo​​​​index.js​​​​exp.css​​​​Example.js​​​​Boss.js......
  • react-native-web跨平台实战
    1.背景 随着对用户体验要求的提高,产品要求提升用户体验,多端体验一致。随着多端相同的业务也越来越多,需要投入IOS,Android,Web多端开发人员。这就迫切的需要一......
  • React函数式组件使用@emotion时一定要注意的问题!
    怎么说呢,一个坑,踩了两天,总觉得是useSate和input的传值方法问题在useMemo和useCallback反复测试问题最后没办法,通过最傻方式,一点点注释代码,发现了问题constContainer=......
  • C#,Winform软件防破译-源代码加密简单方法之.NET REACTOR(一)
     一、.NETReactor介绍 .NETReactor是一个功能强大的代码保护和软件许可系统,适用于为.NETFramework编写的软件,并支持生成.NET程序集的所有语言。支持Blazor保护,支......
  • 2023-02-08 记录一下react-native app项目搭建过程
    项目开发环境:windows10项目运行系统:Android项目搭建前你得确保你有一个用于开发的IDE和已经安装好了的rn(react-native简称)脚手架,我是要用rn的脚手架来搭建项目的。请分......
  • Reactjs学习之fetch请求
    ReactJS通过fecth异步加载数据,并且不需要加载任何模块。是一种XMLHttpRequest的替代方案,除了用ajax获取后台数据外我们还可以使用fetch、axios等方式。1.GET使用方法:/**......
  • React:消息订阅(subscribe)-发布(publish)机制
    发布类似触发事件, 订阅类似监听事件使用这种方式的好处是,兄弟组件间通信不必再像使用props那种通过父组件来通信,多层组件之间通信也不必在一层一层的传递,直接在触发事件......
  • React.Component详细 API(生命周期)
    前言:几年不用react,已发生翻天覆地变化,比如生命周期的方法,现在重写学习,记录变化。  组件的生命周期每个组件都包含“生命周期方法”,你可以重写这些方法,以便于在运行......
  • vue3 | shallowReactive 、shallowRef、triggerRef
    shallowReactive使用reactive声明的变量为递归监听,使用shallowReactive声明的变量为非递归监听(通俗的讲就是reactive创建的对象将会被vue内部进行递归监听,可以监......
  • ReactiveCocoa小结
    ReactiveCocoa(简称RAC)是由GitHub团队开源的一套基于Cocoa的并且具有FRP特性的框架。FRP(FunctionalReactiveProgramming)即响应式编程。RAC就是一个第三方库,使用它可以大大......