首页 技术 正文
技术 2022年11月19日
0 收藏 673 点赞 3,344 浏览 1121 个字

state有时候很不听话,在某些时候,我不想他渲染,偏偏react非常智能的帮我们重复渲染。

比如最常见的就是传递的对象为空,组件依旧渲染了一次或者多次。

更多场景不举例了,对症下药。

shouldComponentUpdate是react提供的生命周期函数,他发生在接收到新的props的时候。简单介绍一下各个生命周期函数。

componentWillMount:组件挂载之前执行,只执行一次componentDidMount: 组件渲染完成,只执行一次=======================================================componentWillRecevieProps: 组件将要接收新的props执行shouldComponentUpdate: 判断组件是否应该重新渲染,默认是true(首次渲染时不会被调用,接受2个参数,新的props和新的state)componentWillUpdate: 组件将要重新渲染componentDidUpdate: 组件重新渲染完成=======================================================componentWillUnmount: 卸载组件

组件生命周期是有顺序的,首先挂载组件,挂载成功完成第一次渲染,然后传递新的props,则会触发componentWillRecevieProps,执行重新渲染的周期,直至渲染完成。

shouldComponentUpdate: function(nextProps, nextState) {
return true;
}

在你的组件内部加上这段代码

component.js

shouldComponentUpdate(nextProps, nextState) {
if (_.isEqual(this.props, nextProps) || !_.isEmpty(this.props)) {
return false
}
return true
}

这里用到了_.isEqual和_.isEmpty,_.isEqual判断当前传进来的值和下一次传递的值是不是相等,是则返回true,_.isEmpty判断当前传递进来的对象是不是为空,为空则返回true。

_.isEqual和_.isEmpty是 lodash 插件里面的函数,这是个轻巧的JavaScript函数插件,可以处理多种常见的数据操作,当然还有一个更多功能的插件。

在你的react项目的入口js导入lodash,因为lodash函数是全局的,所以只需要在入口导入一次即可。

安装

npm install --save lodash

app.js

import ‘lodash’
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,907
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,432
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,247
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,058
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,690
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,727