React生命周期详解

首先当组件第一次渲染的时候会执行哪些生命周期函数?

constructor--->componentWillMount--->render--->componentDidMount

constructor:

初始化

当前生命周期函数可以用来定义当前组件所需要的一些状态

当前生命周期里面必须要写super如果不写会报错/或者this的指向可能发生改变

如果在super和constructor中没有传递props这个参数的话是访问不到this.props属性的,反之可以进行访问

componentWillMount:

组件挂载前:

在当前生命周期函数里面可以访问到props属性,在这里可以接受到外部属性,同时可以将外部属性转换为内部属性

在当前生命周期函数里面不需要调用setState,因为当前函数执行完毕以后就会执行render函数

render:

1、render函数什么时候会执行?

a、当this.props/this.state发生改变的时候render函数就会去执行。

2、this.props/this.state发生改变的时候会执行哪些生命周期函数

this.state:

shouldComponentUpdate--->componentWillUpdate--->render--->componentDidUpdate

this.props

componentWillReceiveProps--->shouldComponentUpdate--->componentWillUpdate--->render--->componentDidUpdate

2、render函数执行的时候会将虚拟DOM和数据进行相结合,在缓存中缓存一份虚拟DOM,当数据发生改变的时候

会将虚拟DOM与缓存中的虚拟DOM进行比较(diff算法)。比较完毕以后,将需要修改的虚拟DOM进行批量修改。

而不是全部修改,减少不必要的更新

3、什么叫做diff算法

新旧两个虚拟DOM的对比就是tree diff

componentDidMount:

render函数执行完毕以后componentDidMount就会去执行。在这个生命周期函数里面我们可以进行fetch的请求

以及获取到真实的DOM结构

componentWillUnmount:

组件销毁

shouldComponentUpdate:

1、当this.state/this.props发生改变的时候会执行render函数,

2、shouldComponentUpdate这个生命周期函数必须要返回一个布尔值 如果返回true则下面的生命周期函数继续执行,

如果返回false下面的生命周期函数不在执行

3、shouldComponentUpdate这个生命周期函数主要是用来判断DOM是否更新 而不是数据是否更新(不管返回值是true或者

false,this.state中的数据肯定会发生改变,但是如果返回值是false的情况下DOM是不会进行更新的

)

4、shouldComponentUpdate这个生命周期函数里面我们可以做一些相关的操作来减少虚拟DOM不必要的更新(利用

shouldComponentUpdate中接受到的2个参数 一个是新的props 一个是新的state 进行比较

)

componentWillUpdate:

更新前:

虚拟DOM与数据进行相结合,但是没有生成真正的DOM结构

componentDidUpdate:

更新后:

数据和模板进行相结合生产了真正的DOM结构,在这里可以获取到数据更新后最新的DOM结构

componentWillReceiveProps:

当外部属性发生改变的时候就会执行当前生命周期函数,当前生命周期函数会有一个参数是新的Prop

操作DOM的两种方式

1、ref="list" this.refs.list

2、ref={(tagName)=>{this.key = tagName}} this.key

document.getElementById("list") || this.refs 区别?(作业)

react生命周期函数中有哪些生命周期函数只会执行一次?

constructor

componentWillMount

componentDidMount

componentWillUnMount

react生命周期函数中有哪些生命周期函数会执行多次?

componentWillRecevieProps

shouldComponentUpdate

componentWillUpdate

render

componentDidUpdate

原文地址:https://www.cnblogs.com/zdhBK/p/10123431.html

时间: 2024-08-29 14:22:48

React生命周期详解的相关文章

React—组件生命周期详解

React-组件生命周期详解 转自 明明的博客  http://blog.csdn.net/slandove/article/details/50748473 (非原创) 版权声明:转载请注明出处,欢迎加入QQ群(115402375)讨论!博客编写已经转移到http://blog.csdn.net/limm33 在组件的整个生命周期中,随着该组件的props或者state发生改变,它的DOM表现也将有相应的改变,一个组件就是一个状态机,对于特定的输入,它总会返回一致的输出. React为每个组件

ASP.NET生命周期详解 [转]

最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等,对于ASP.NET MVC同样适用.只是MVC URLRouting Module对进入到server的request进行了拦截,然后对此次request的handler进行了特殊的处理.总结来说,就是 ASP.NET管道是所有ASP.NET Web Applicaiton,包括WebForm,

struts2.0中Action的对象生命周期详解!!(转)

原文出处:http://blog.csdn.net/wxy_g/article/details/2071662 有很多人问Struts2.0中的对象既然都是线程安全的,都不是单例模式,那么它究竟何时创建,何时销毁呢? 这个和struts2.0中的配置有关,我们来看struts.properties ### if specified, the default object factory can be overridden here ### Note: short-hand notation is

IOS应用的执行过程以及生命周期详解

iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受到系统的很多限制,这样可以提高电池的使用和用户体验. //开发app,我们要遵循apple公司的一些指导原则,原则如下: 1.应用程序的状态 状态如下: Not running  未运行  程序没启动 Inactive          未激活        程序在前台运行,不过没有接收到事件.在没

android四大基础组件--Service生命周期详解

android四大基础组件--ServiceService 生命周期详解 1.Service的生命周期: I> 在非绑定Service情况下,只有oncreate(),onStartCommand(),onDestory()方法情况下:  操作方法对应生命周期一: a.[执行startService(Intent)] 执行生命周期方法:oncreate()--->onStartCommand(): b.[执行stopService(Intent)] 执行生命周期方法:onDestory();

Fragment生命周期详解

Fragment生命周期详解 1. Fragment概述 Fragment从Android v3.0版本开始引入 随着界面布局的复杂化,处理起来也更加的复杂,引入Fragment可以把activity拆分成各个部分.每个Fragment都有它自己的布局和生命周期.方便了开发. 采用fragment而不是activity进行应用的UI管理,可绕开Android系统activity规则的限制. fragment是一种控制器对象,activity可委派它完成一些任务通常这些任务就是管理用户界面.受管的

Spring Bean的生命周期详解

Spring Bean的生命周期详解 Spring IoC容器的本质目的就是为了管理Bean,对于Bean而言,在容器中存在其生命周期,它的初始化和销毁也需要一个过程,下面主要对其生命周期进行一个详解的解释.生命周期主要是为了了解Spring IoC容器初始化和销毁Bean的过程,通过下图即可以掌握Spring IoC容器初始化与销毁Bean的过程. 通过上图,我们首先可以看到生命周期的步骤. 1)如果Bean实现了接口 BeanNameAware 的 setBeanName 方法,那么它就会调

【转】Java 类的生命周期详解

一. 引 言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内java方面的教材大多只是告诉你“怎样做”,但至于“为什么这样做”却不多说,所以造成大家在基础和原理方面的知识比较匮乏,所以笔者今天就斗胆来讲一下这个问题,权当抛砖引玉,希望对在这个问题上有疑惑的朋友有所帮助,文中有说的不对的地方,也希望各路高手前来指正. 首先来了解一下jvm(java虚拟机)中的几个比较重要的内存区

vue2.0生命周期详解(前端网备份)

这篇大佬用图文分析详解vue2.0里面的生命周期<script src="https://cdn.bootcss.com/vue/2.4.2/vue.js"></script>;页面中渲染的优先值:所以综合排名优先级:render函数选项 > template选项 > outer HTML. https://segmentfault.com/a/1190000011381906 下面这个链接的console更清晰https://www.cnblogs