react减少组件渲染
当this.setState()修改了state中的数据后,当前组件将重新渲染,同时也会重新渲染子组件,但只会渲染当前组件子树(当前组件以其所有子组件)

shouldComponentUpdate
当父组件更新会引起子组件也被更新,问题是此时子组件没有任何变化时也会重新渲染,我们就要避免不必要的重新渲染。解决方式使用钩子函数 shouldComponentUpdate(nextProps, nextState),这个函数有返回值,如果返回true,代表需要重新渲染,如果返回false,代表不需要重新渲染
在App.jsx组件中定义数据源,并设置修改
import React, { Component, createRef } from 'react'
import Users from './components/Users';import Users2 from './components/Users2';
// 只有在类组件中才有生命周期
export default class App extends Component {
state = {
username: 'admin',
sex: '男',
count: 1
}
componentDidMount() {
setTimeout(() => {
console.log('settimeout');
this.setState({
username: 'user'
})
}, 3000);
}
render() {
return (
<div> <Users username={this.state.username} /> <Users2 username={this.state.sex} />
</div>
)
}
}
子组件
在子组件中针对于props来完成有数据变化则进行组件渲染
本组件中state数据如果没有发现改变,则不发生渲染
import React, { Component} from 'react'
// Component 类,不管是是否有数据更新,只要有数据变化,它和它的子组件都重新渲染
export default class Users extends PureComponent {// 下一次的props和state数据 新数据
shouldComponentUpdate(nextProps, nextState) {
// this.props.username 旧数据
if (nextProps.username === this.props.username && nextState.nickname === this.state.nickname) {
// 当前的数据没有发生改变
return false
}
return true
}
render() {
console.log('child-User----render');
return (
<div>
我是一个子组件 --- {this.props.username}
</div>
)
}
}
PureComponent
React.PureComponent 与 React.Component 功能相似的,区别在于React.PureComponent 内部自动实现了 shouldComponentUpdate钩子,不需要手动进行比较操作。
原理:纯组件内部通过分别比对前后两次 props和state的值,来决定是否重新渲染组件
PureComponent它只是实现了浅层对比
- 对于值类型来说:比较两个值是否相同
- 引用类型:只比对对象的引用地址是否相同

react减少组件渲染的更多相关文章
- React性能优化,六个小技巧教你减少组件无效渲染
壹 ❀ 引 在过去的一段时间,我一直围绕项目中体验不好或者无效渲染较为严重的组件做性能优化,多少积累了一些经验所以想着整理成一片文章,下图就是优化后的一个组件,可以对比优化前一次切换与优化后多次切换的 ...
- react基础用法二(组件渲染)
react基础用法二(组件渲染) 如图所示组件可以是函数 格式:function 方法名(){ return <标签>内容</标签>} 渲染格式: <方法名 /> ...
- react如何通过shouldComponentUpdate来减少重复渲染
转自:https://segmentfault.com/a/1190000016494335 在react开发中,经常会遇到组件重复渲染的问题,父组件一个state的变化,就会导致以该组件的所有子组件 ...
- react中类组件、函数组件、state、单层遍历、多层遍历、先遍历后渲染、if-else、三目运算符
1.回顾 module.exports = { entry: {}, output: {}, plugins: [], module: {}, resolve: {}, devServe: {} } ...
- reselect是怎样提升react组件渲染性能的?
reselect是什么? reselect是配合redux使用的一款轻量型的状态选择库,目的在于当store中的state重新改变之后,使得局部未改变的状态不会因为整体的state变化而全部重新渲染, ...
- 移动web端的react.js组件化方案
背景: 随着互联网世界的兴起,web前端开发的方式越来越多,出现了很多种场景开发的前端架构体系,也对前端的要求日益增高,早已经不是靠一个JQuery.js来做前端页面的时代了,而今移动端变化最大,近 ...
- (十分钟视频教程)nodejs基础实战教程3:react服务端渲染入门篇
视频截图如下: (具体视频见文末) 前言: 这是小猫的第三篇node教程,本篇内容是由公众号粉丝票选得出的,相信大家对这篇教程是抱有较大希望的,这篇教程由小猫和一位多年的好朋友合作完成(笔名:谷雨,博 ...
- react创建组件的几种方式及其区别
react创建组件有如下几种方式 ①.函数式定义的无状态组件 ②.es5原生方式React.createClass定义的组件 ③.es6形式的extends React.Component定义的组 ...
- React 避免重渲染
组件的重新渲染 我们可以在 React 组件中的 props 和 state 存放任何类型的数据,通过改变 props 和 state,去控制整个组件的状态.当 props 和 state 发生变化时 ...
- Docz 用 MDX 写 React UI 组件文档
Docz 用 MDX 写 React UI 组件文档 前言 为了提升开发效率,创建一套 UI 组件库是一种较为有效的方式之一:可以减少重复工作.提高可复用,所以现在越来越多团队开始创建自己的 UI 组 ...
随机推荐
- 【阿里云采购季】3月采购完,IT运维躺赢一年
阿里云2020上云采购季正式上线啦!今年的采购季可以逛些啥? 采购季正式期时间: 3月2日-3月31日 在这段时间里,想买啥就买吧,别忘了把想买的产品加入购物车噢,特惠产品叠加购物车满减,更划算噢! ...
- [FAQ] CodeMirror5, CodeMirror6 EditorView 获取输入值和设置值的方式
获取值: // CodeMirror5 cm.getValue() 改为使用 // CodeMirror6 cm.state.doc.toString() 设置值: // CodeMirror5 ...
- [FAQ] FinalCutPro 添加转场提示“片段边缘之外没有足够的额外媒体可用来创建转场”
可以把前镜头素材的结尾和后镜头素材的开始减去一部分即可添加转场了. 怎么剪?时间线中有个播放线,快捷键 i 表示选中开始点,快捷键 o 表示选中结束点,使用 delete 键删除选取的部分即可. &g ...
- WPF 制作一个占用文件的测试工具
我在开发软件进行测试时,需要测试拖入的文件被占用时软件的行为,于是就做了一个文件占用工具,此工具可以将某个文件进行占用,以及获取某个文件被哪个进程占用 先给大家看一下效果: 以上是拖入文件到灰色部分, ...
- Vue源码-手写mustache源码
引言 在Vue中使用模板语法能够非常方便的将数据绑定到视图中,使得在开发中可以更好的聚焦到业务逻辑的开发. mustache是一个很经典且优秀的模板引擎,vue中的模板引擎也对其有参考借鉴,了解它能更 ...
- k8s-1.28版本多master部署
一.环境准备 k8s集群角色 IP 主机名 安装相关组件 kubernetes版本号 控制节点 192.168.10.20 master apiserver.controller-manager.sc ...
- CMDB开发(一)
一.CMDB前戏 # 项目开发流程 1.需求分析 产品经理 开发人员 客户等三方会议 2.架构设计 框架的选择 语言选择 数据库选择 3.分组开发 小组成员各自开发各自的功能(可能也会有交集) 4. ...
- 一个用Python将视频变为表情包的工具
这是一个将视频转变为表情包的工具,现实生活中当我们看到一段搞笑的视频,我们可以将这段视频喂给这段程序,生成gif表情包,这样就可以用来舍友斗图了 1.一些限制 1.这个程序不能转化超过15秒以上的视频 ...
- 机器学习策略篇:详解开发集和测试集的大小(Size of dev and test sets)
在深度学习时代,设立开发集和测试集的方针也在变化. 可能听说过一条经验法则,在机器学习中,把取得的全部数据用70/30比例分成训练集和测试集.或者如果必须设立训练集.开发集和测试集,会这么分60%训练 ...
- Sermant在异地多活场景下的实践
本文分享自华为云社区<Sermant在异地多活场景下的实践>,作者:华为云开源. Sermant社区在1.3.0和1.4.0版本相继推出了消息队列禁止消费插件和数据库禁写插件,分别用于解决 ...