React 重温之 组件生命周期

生命周期

任何事物都不会凭空产生,也不会无故消亡。一个事物从产生到消亡经理的各个阶段,我们称之为 生命周期。

具体到我们的前端组件上来,一个组件的生命周期可以大体分为创建、更新、销毁这个三个阶段。

本文主要介绍React 的组件生命周期,并以最新发布的v16为分水岭,介绍前后生命周期函数的变化。

组件生命周期

在React代码里,我们通常通过继承React.Component这个抽象基础类来定义一个有生命周期函数的组件(函数式生命无法自定义生命周期函数),react官方将其生命周期分为以下三个阶段:

装载

这个阶段是指组件初始化并插入DOM中,主要包含以下函数:

constructor()
static getDerivedStateFromProps()
componentWillMount() / UNSAFE_componentWillMount()
render()
componentDidMount()

更新

当组件状态发生变化时,会触发一次更新

componentWillReceiveProps() / UNSAFE_componentWillReceiveProps()
static getDerivedStateFromProps()
shouldComponentUpdate()
componentWillUpdate() / UNSAFE_componentWillUpdate()
render()
getSnapshotBeforeUpdate()
componentDidUpdate()

销毁

当组件从DOM中移除时,启动销毁:

componentWillUnmount()

具体如下图:

React 生命周期函数

如上图所示,绿色背景为v16版本新增的生命周期函数,黄色背景的的为v16版本建议弃用,并在后续版本中会删除的生命周期函数。

其中getDerivedStateFromProps是一个静态函数,用来替换原来的componentWillMount函数,可以在这个静态函数中将props里的属性添加到state中去,这里应该是一个纯函数。

getSnapshotBeforeUpdate用来做一些必须要修改真实DOM的操作,虽然不建议这么做。

One more thing

React 同时提供一个componentDidCatch函数,来表明当前组件是一个边界错误处理组件,具体可以参考错误边界

参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迁移聊天记录到Teams

有一些朋友问我teams是否支持将其他平台/系统里的聊天记录迁移某个channel里,答案是肯定的,teams团队在去年年中的时候就提供了这个功能。这个功能是通过graph api来完成的,我们今天就来看看如何迁移聊天记录到teams里。 首先,我…

leetcode-191-Number of 1 Bits

题目描述: Write a function that takes an unsigned integer and returns the number of 1 bits it has (also known as the Hamming weight). Example 1: Input: 11 Output: 3 Explanation: Integer 11 has binary representation 000000000000000000000000000010…

androidsdk里的android.bat和uiautomatorview.bat启动就闪退问题

进入D:\androidsdk\tools文件夹: 使用编辑文件工具: rem Check we have a valid Java.exe in the path.set java_execall lib\find_java.bat 替换成下列代码: rem Check we have a valid Java.exe in the path.set java_exeC:\Program Files\…

10 个优质的 Laravel 扩展推荐

这里有 10 个用来搭建 Laravel 应用的包 为何会创建这个包的列表?因为我是一个「比较懒」的开发者,在脸书上是多个 Laravel 小组的成员。平日遇到最多的问题就是开发是需要用那些包。我很懒所以我不想每次都从头开始搞这些东东。 为何此文没有包括管理包…

Teams AppId, InstallationId 和 ExternalId 的区别

大家如果看teams的 graph api 开发文档,可能会把 app id, installation id 和 external id 搞混,我自己一开始的时候就有点被搞晕了,再加上app manifest里面的 id 和 bot id,基本就彻底晕掉了。 那我们今天这篇文章就来讲讲这几种…

osi参考模型(开放系统互连参考模型)

自互联网诞生以来,随着网络飞速发展,用户迫切要求能在不同体系结构的网络空间交换信息,使得不同的网络能够互联起来。 国际化标准组织(International Organization for Standardization,即ISO)从1977年开始…

Java:反射+泛型:获取类型参数的实例

2019独角兽企业重金招聘Python工程师标准>>> 场景描述&#xff1a; 我需要开发四个页面&#xff0c;每个页面都是只涉及增删改查的基本逻辑。 最简单的写法&#xff1a; 创建四个接口A,B,C,D&#xff0c;每个接口中都声明了增删改查四个方法,完全一致 public Map<…

servlet(1)

servlet类分级&#xff1a; 1.ServletConfig接口类&#xff1a;理解为读取servlet配置的类&#xff0c;里面有四个抽象方法如下&#xff1a; ①getServletName:获取servlet在web.xml中的名字 ②getServletContext&#xff1a;获取Servlet上下文&#xff0c;相当于web项目管理所…

如何在 Apple Silicon (M1) 上开发 Teams App

apple 在几个月前发布了自家的芯片 M1&#xff0c;由于将多核cpu&#xff0c;多核gpu&#xff0c;神经网络运算&#xff0c;内存和其他一切处理部件高度整合在一起&#xff0c;大大提高数据传输速度。发布后好评如潮&#xff0c;我也没有忍住&#xff0c;入手了一台最低配的mac…

BZOJ5289 洛谷4437:[HNOI/AHOI2018]排列——题解

https://www.lydsy.com/JudgeOnline/problem.php?id5289 https://www.luogu.org/problemnew/show/P4437 考虑对于a[i]m,a[m]n&#xff0c;我们令p[j]i,p[k]m&#xff08;一定会有一对(j,k)满足这个条件的&#xff09;&#xff0c;则我们会有p[k]a[p[j]]&#xff0c;此时我们要…

集成学习-Adaboost

Adaboost 中文名叫自适应提升算法&#xff0c;是一种boosting算法。 boosting算法的基本思想 对于一个复杂任务来说&#xff0c;单个专家的决策过于片面&#xff0c;需要集合多个专家的决策得到最终的决策&#xff0c;通俗讲就是三个臭皮匠顶个诸葛亮。 对于给定的数据集&#…

主动给团队或用户安装Teams App

在写这篇文章的时候&#xff0c;这个新功能还处在 Public Review&#xff0c;这意味着可能&#xff08;很小的可能性&#xff09;这里写的方法在正式发布前还会有一些改动。 之前有一些做teams app开发的朋友问过我&#xff0c;能不能主动给一个team或者一个用户安装一个指定的…

thinkphp5多级控制器是什么?怎么使用?

thinkphp5多级控制器是什么&#xff1f;怎么使用&#xff1f; 一、总结 1、多级控制器是让控制器的级数变成多级&#xff0c;也就是controller目录下可以新建其它目录。 2、使用的话注意目录下的控制的的命名空间&#xff08;加上目录名&#xff09;&#xff08;namespace app\…

给Teams消息附加图片的三种方式

Teams消息支持三种不同的方式来添加图片&#xff0c;这篇文章我们来一起看一下这三种方式。 Inline图片 var imagePath Path.Combine(Environment.CurrentDirectory, "abc.png"); var imageData Convert.ToBase64String(File.ReadAllBytes(imagePath)); var image…

4月18日 MySQL学习

正式开始了数据库的学习 昨天下好的MySQL 今天正式开始学习的&#xff0c;介绍了多种数据库软件&#xff0c;当然 学习的这个是开源的 免费的。 DBMS(数据库管理系统)这就是我们学习的数据库的软件 数据库分为关系型数据库管理系统和非关系型数据库管理系统(没有深入的了解) 今…

企业数据湖构建之旅

摘要&#xff1a;随着互联网的发展&#xff0c;数据的规模和类型都呈现一个爆炸性的增长&#xff0c;对于这么多类型的数据&#xff0c;如何进行有效的管理和存储&#xff0c;包括数据的分析&#xff0c;这是大家要面临的一个问题。在武汉云栖大会上&#xff0c;阿里云高级产品…

用AzureFunction开发最简单的Teams Bot

之前我有一篇文章讲了如何在azure function上开发最简单的outgoing webhook&#xff0c;收到一些反馈&#xff0c;建议我介绍一下如果在azure function上开发teams bot&#xff0c;那这篇文章就来讲一下如何用function来快速开发bot。 我们先创建一个azure function资源&#…

20189215 2018-2019-2 《密码与安全新技术专题》第7周作业

课程&#xff1a;《密码与安全新技术专题》 班级&#xff1a; 1892班 姓名&#xff1a; 李炀 学号&#xff1a;20189215 上课教师&#xff1a;谢四江 上课日期&#xff1a;2019年4月9日 必修/选修&#xff1a; 选修 1.本次讲座的学习总结 讲座主题&#xff1a;信息隐藏 信息隐藏…

BZOJ1565[NOI2009]植物大战僵尸——最大权闭合子图+拓扑排序

题目描述 Plants vs. Zombies&#xff08;PVZ&#xff09;是最近十分风靡的一款小游戏。Plants&#xff08;植物&#xff09;和Zombies&#xff08;僵尸&#xff09;是游戏的主角&#xff0c;其中Plants防守&#xff0c;而Zombies进攻。该款游戏包含多种不同的挑战系列&#xf…

推送ActivityFeed到Teams

几个月前&#xff0c;Teams 团队又推出了新的 Graph API&#xff0c;让 app 可以给用户发送 Activity Feed。我们来看看如何做。 首先&#xff0c;我们的app需要使用较新的 manifest 1.7版本&#xff0c;当然如果使用最新的1.8版本就更好了。在manifest json中添加 webApplica…