浅聊本人学习React的历程——第一篇生命周期篇
作为一个前端小白,在踏入前端程序猿行业的第三年接触了React,一直对于框架有种恐惧感,可能是对陌生事物的恐惧心里吧,导致自己一直在使用原生JS和JQ作为开发首选,但是在接触了React之后,发现了其强大的能力,尤其是在开发大型企业级应用的时候,其自带的生命周期函数和原型可以帮助你减少大量的冗杂的JS代码,同时页面渲染十分顺畅,话不多数,下面进入React。
涉及到生命周期函数,首先要问几个问题。有哪些生命周期函数?每个生命周期函数都是在何时被加载?加载以后的效果都是什么?这里面有趣的地方在哪里?在解答这几个问题之前先上生命周期图~

一、有哪些生命周期函数(即钩子函数)
按照常规所记的顺序,依次如下:constructor、componentWillMount、render、componentDidMount、componentWillReceiveProps、shouldComponentUpdate、componentWillUpdate、componentDidUpdate、componentWillUnmount。
二、具体函数分析
1. constructor(): 构造函数
constructor函数在组件被加载之前调用,也就是最先被调用,而且只会被调用一次。注意:该函数内部第一句必须是super(props),如果不加这句话,会报‘this’ is not allowed before super()的错!
该函数作用是在一开始定义全局状态变量,同时默认接收两个参数props和context,
2. componentWillMount()
componentWillMount函数在组件初始渲染(即reader() 被调用之前)被调用,也是只会被调用一次。可以在该函数中进行state状态机的更改,在之后的render函数会看到更新后的state,而且不会重复渲染。
注意:该函数在在react16.3.0版本停止维护,如果要使用的话,请用UNSAFE_componentWillMount来代替。
3. render() : 渲染组件
render函数执行在componentWillMount之后,componentDidMount之前被调用。该函数的作用是渲染将要挂载的组件。千万不要在该函数之中修改state,这样会导致死循环,虽然在其中可以设置state,但是你在渲染组件之前所进行的所有状态机的操作都会失效。它会在状态机更新和初始化页面的时候重新加载。
4.componentDidMount()
componentDidMount函数在组件挂载完成之后加载,也是只会被调用一次。在其中可以使用React中的特殊属性—refs来准确定位你需要操作或者获取的组件实例。
如果子组件中也设置了该函数,那么子组件中的该函数将在父组件的该函数执行前被调用!
5.componentWillReceiveProps ( nextProps )
该函数被调用在props即将变化之前,也就是说当它接收到新的props时,就会被调用,该函数会接收一个参数nextProps,即新的props,同样可以通过this.props来调用之前的props。它的作用是渲染挂载组件,在该函数内部也可以使用refs(看上一个函数)来精确定位一些需要操作的实例。
注意:该函数在在react16.3.0版本停止维护,如果要使用的话,请用UNSAFE_componentWillReceiveProps来代替。
6. shouldComponentUpdate(nextProps, nextState)
该函数有些特殊,当组件挂载完成之后,每次调用setState的时候才会调用该函数。主要是用来判断是否需要重新挂载组件,当调用该函数时默认重新挂载组件,重新渲染render。该函数传入两个参数,一个是nextProps即新的props,另一个是nextState即新的state。在大型企业级后台应用中,当部分变化不需要重新加载render的时候,可以在该函数中进行操作。
7. componentWillUpdate()
该函数在初始化之时不会被调用,但是在接收到新的props或者当前组件的state状态机更新之后并被当前函数接收到的时候被调用,在该函数之中不可以修改状态机,否则会造成死循环。
注意:React v16.3后废弃该生命周期,可以用新的周期 getSnapshotBeforeUpdate
8. componentDidUpdate()
初始化(即第一次渲染组件)时调用componentDidMount,在此之后的所有render结束之后都要调用componentDidUpdate。在该方法中可以在组件更新之后操作DOM元素。
9.componentWillUnmount()
该函数在组件即将被卸载的时候被调用,一般在该方法中执行清理操作,例如定时器等。
嗯嗯,作为一名小白,暂时的理解就到此为止,有任何不对或者有疑问的地方欢迎各位大佬随时评论。
友情链接:https://blog.csdn.net/qq_40023436/article/details/86508580
浅聊本人学习React的历程——第一篇生命周期篇的更多相关文章
- React 入门学习笔记整理(七)—— 生命周期
(1)react 生命周期 只有类组件有生命周期,函数组件没有生命周期 1.挂载阶段:这些方法会在组件实例被创建和插入DOM中时被调用: 1)constructor(props) 初始化组件的状态.绑 ...
- react学习(6)——关于组件生命周期的问题
在项目开发的过程中,遇到了一个问题: 父组件请求后台数据,收到后将数据以props传给子组件,子组件根据收到数据的不同,显示不同的内容,同时,子组件自身可以根据click操作改变根据父组件的数据显示的 ...
- React Native 中组件的生命周期
概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命 ...
- 初识React,Virutal DOM, State以及生命周期
这是React分类下的第一篇文章,是在了解了一些基本面后,看Tyler文章,边看边理解边写的. React可以看做是MVC中的V,关注的是视图层.React的组件就像Angular的Directive ...
- React Native 中组件的生命周期(转)
概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命 ...
- vue学习-day02(自定义指令,生命周期)
目录: 1.案例:品牌管理 2.Vue-devtools的两种安装方式 3.过滤器,自定义全局或私有过滤器 4.鼠标按键事件的修饰符 5.自定义全局指令:让文本框获取焦点 ...
- Android学习整理之Activity生命周期篇
一.Activity生命周期说明 Activity的四种状态: ⒈活动状态(Active or Running):也称为运行状态,处于Activity栈顶,在用户界面中最上层,完全能被用户看到,能 ...
- (转)《深入理解java虚拟机》学习笔记7——Java虚拟机类生命周期
C/C++等纯编译语言从源码到最终执行一般要经历:编译.连接和运行三个阶段,连接是在编译期间完成,而java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对 ...
- 第一节 生命周期和Zend引擎
一切的开始: SAPI接口 SAPI(Server Application Programming Interface)指的是PHP具体应用的编程接口, 就像PC一样,无论安装哪些操作系统,只要满足了 ...
随机推荐
- bzoj 1997 [Hnoi2010]Planar——2-SAT+平面图的一个定理
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1997 平面图的一个定理:若边数大于(3*点数-6),则该图不是平面图. 然后就可以2-SAT ...
- 反射ORM
七章 反射 1节获取dll文件中的type---------------------------------------------------------------------------- ...
- Spring MVC 项目示例
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架.Spring的web框架围绕DispatcherServlet设计, 作用是将请求分发到不同 ...
- ThreadPoolTaskExecutor异常收集
ThreadPoolTaskExecutor ipFinderThreads = new ThreadPoolTaskExecutor(); ipFinderThreads.setCorePoolSi ...
- java中try{}catch{}和finally{}的执行顺序问题
今天我给大家讲解一下java的的错误和异常处理机制以及相关异常的执行顺序问题.如有不足的地方,欢迎批评指正~ 1.首相简单介绍一下java中的错误(Error)和异常(Exception) 错误和异 ...
- 基于OpenCV的火焰检测(二)——RGB颜色判据
上文跟大家分享了在做火焰检测中常用到的图像预处理方法,从这一篇博文开始,我将向大家介绍如何一步一步地检测出火焰区域.火焰提取要用 到很多判据,今天我要向大家介绍的是最简单的但是很有效的判据--RGB判 ...
- 侯捷STL学习(十)--容器hashtable探索(unordered set/map)
layout: post title: 侯捷STL学习(十) date: 2017-07-23 tag: 侯捷STL --- 第二十三节 容器hashtable探索 hashtable冲突(碰撞)处理 ...
- “百度杯”CTF比赛 2017 二月场(Misc Web)
爆破-1: 打开链接,是502 我直接在后面加个变量传参数:?a=1 出了一段代码 var_dump()函数中,用了$$a,可能用了超全局变量GLOBALS 给hello参数传个GLOBALS 得到f ...
- 新版本Ubuntu本地提权漏洞复现
该漏洞在老版本中被修复了,但新的版本还存在漏洞 影响范围:Linux Kernel Version 4.14-4.4,Ubuntu/Debian发行版本 Exp下载地址:http://cyseclab ...
- leetcode653
class Solution { public: bool findTarget(TreeNode* root, int k) { queue<TreeNode> Q; vector< ...