react 生命周期详解
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’
react 生命周期详解的更多相关文章
- React生命周期详解
React生命周期图解: 一.旧版图解: 二.新版图解: 从图中,我们可以清楚知道React的生命周期分为三个部分: 实例化.存在期和销毁时. 旧版生命周期如果要开启async rendering, ...
- React—组件生命周期详解
React—组件生命周期详解 转自 明明的博客 http://blog.csdn.net/slandove/article/details/50748473 (非原创) 版权声明:转载请注明出处,欢 ...
- ASP.NT运行原理和页面生命周期详解及其应用
ASP.NT运行原理和页面生命周期详解及其应用 1. 下面是我画的一张关于asp.net运行原理和页面生命周期的一张详解图.如果你对具体不太了解,请参照博客园其他帖子.在这里我主要讲解它的实际应用. ...
- ASP.NET生命周期详解
最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...
- ASP.NET生命周期详解 [转]
最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...
- ASP.NET生命周期详解(转)
看到好文章需要分享. 最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多 ...
- Vue生命周期详解
Vue所有的生命周期钩子自动绑定在this上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周期方法.这是因为箭头函数绑定了父上下文,因此this与你期 ...
- vue组件生命周期详解
Vue所有的生命周期钩子自动绑定在this上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周期方法.这是因为箭头函数绑定了父上下文,因此this与你期 ...
- React(v16.8.4)生命周期详解
当前版本v16.8.4 装载过程(组件第一次在DOM树中渲染的过程): constructor(常用) -> getInitialState(v16.0已废弃) -> getDefault ...
随机推荐
- Golang 简单静态web服务器
直接使用 net.http 包,非常方便 // staticWeb package main import ( "fmt" "net/http" "s ...
- 201621123080 《Java程序设计》第10周学习总结
201621123080 <Java程序设计>第10周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 ...
- LeetCode945-使数组唯一的最小增量
问题:使数组唯一的最小增量 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1. 返回使 A 中的每个值都是唯一的最少操作次数. 示例 1: 输入:[1,2,2] 输出:1 ...
- 如何用纯 CSS 创作一个行驶中的火车 loader
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/RBLWzJ 可交互视频 ...
- 采用Atlas+Keepalived实现MySQL读写分离、读负载均衡
========================================================================================== 一.基础介绍 == ...
- atag信息处理
machine_desc->boot_params参数保存的是u-boot传入的启动参数的地址,如果没有传入启动参数,使用如下的默认参数: /* * This holds our default ...
- java事物
[引用:http://www.cnblogs.com/kristain/articles/2038397.html] 一.什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数 ...
- CornerStone使用教程(配置SVN,HTTP及svn简单使用)
1.SVN配置 假设你公司svn地址为:svn://192.168.1.111/svn/ios,用户名:svnserver,密码:123456 1:填写主机地址 2:如果你的主机地址中有端口号,如为1 ...
- 令人惊叹的Chrome浏览器插件
Chrome是一个简洁而又高效(高性能,高消耗)的浏览器.接下来让我吐血推荐一些常用的Chrome插件. 日常插件 uBlock Origin ----- 比Adblock性能更高的广告插件. Adk ...
- RIP 路由协议
RIP动态路由选择协议 routing information protocol IGP 小范围 路由器限制为15台 超过可能无法收敛 收敛概念 在一个域内 各个路由器知道各 ...