一篇搞定React生命周期以及执行顺序 v16.8+(前端面试整理)

2023-10-26

React 组件生命周期

从事前端工作已经有一段时间,最近在面试求职者的时候发现,React最基础的实例生命周期都说不清楚,也不能说清楚每个生命周期方法具体作用,所以我通过代码+官网文档的形式总结下文。React生命周期可以说是react最基础的知识点,熟练掌握也可以更好的使用和优化react项目。

React 生命周期图谱

在这里插入图片描述

React 生命周期函数详细介绍

1.组件挂载过程
  1. constructor
  2. componentWillMount
  3. render
  4. componentDidMount

运行过程

1. constructor 初始化整个组件的state 以及调用super(props)
2. componentWillMount 发生在render之前触发,既可以在客户端触发也可以在服务端触发。SSR的时候,无法触发组件的componentDidMount时,需要在该生命周期中调用服务。
3. render 会根据props,state值构建并返回一个新的对象,如果在render中调用其他的自组件,会在这里触发其他自组件的生命周期,知道自组件render完成后,render才结束。
4. componentDidMount 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。
2.组件更新过程
  1. componentWillReceiveProps
  2. shouldComponentUpdate
  3. componentWillUpdate
  4. render
  5. componentDidUpdate

运行过程

1.componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。
2.shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。
3.componentWillUpdate 组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。
4.componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。

3.组件卸载

  1. componentWillUnmount

运行过程

componentWillUnmount 在组件从 DOM 中移除之前立刻被调用。一般在这个地方卸载定时器等

React 生命周期图谱(react16)

在这里插入图片描述
上面列举的都是react16之前的生命周期,在react16版本之后,新增了几个新的生命周期来替换之前可能会出问题的生命周期

  1. getDerivedStateFromProps

getDerivedStateFromProps 会在调用 render 方法之前调用,并且在初始挂载及后续更新时都会被调用。它应返回一个对象来更新 state,如果返回 null 则不更新任何内容。

getDerivedStateFromProps 方法用来替换 componentWillMountcomponentWillUpdate,而且新周期函数跟旧周期函数不能同时使用。
在这里插入图片描述

  1. getSnapshotBeforeUpdate

getSnapshotBeforeUpdate() 在最近一次渲染输出(提交到 DOM 节点)之前调用。它使得组件能在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置)。此生命周期的任何返回值将作为参数传递给 componentDidUpdate()。

getSnapshotBeforeUpdate(prevProps, prevState) 在最近一次渲染输出(提交到 DOM 节点)之前调用。它使得组件能在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置)。此生命周期的任何返回值将作为参数传递给 componentDidUpdate(prevProps, prevState, snapshot)。而且新周期函数跟旧周期函数不能同时使用。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一篇搞定React生命周期以及执行顺序 v16.8+(前端面试整理) 的相关文章

  • 仅当表单已提交时才触发 jQuery 表单验证?

    不引人注目的验证基于这样的想法 don t进行表单验证 直到用户提交表单 一旦发生这种情况 如果表单上的某些内容无效 那么一旦用户更改了每个字段 就会立即验证它 我想做的是 不显眼地 触发表单元素的验证 也就是说 only如果用户已尝试提交
  • 取消html5浏览器中的单图请求

    我正在动态加载 大 图像以绘制到 html5 画布中 如下所示 var t new Image t onload t src http myurl 但每隔一段时间就会想取消图片请求完全地 我想出的唯一方法是设置src to i e t sr
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • 如何使用 JavaScript 中的值填充下拉列表?

    我在 Tridion CMS 扩展中的功能区工具栏按钮中添加了一个按钮 单击该按钮后 将显示一个弹出页面 其中包含两个下拉菜单 通过更改第一个下拉控件中的值 我应该填充第二个下拉控件的值 就我而言 我正在使用ASP drop down li
  • 非 DOM 对象上的 jQuery 自定义事件

    我最近阅读了一些代码 其功能如下 bob name Bob Smith rank 7 bob bind nameChanged function bob trigger nameChanged 这似乎有效 但我在 jQuery 文档或源代码
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • 使用 moment.js 检查输入日期是否为星期一

    好吧 我想检查日期是否是星期一 例如 var myDate new Date moment myDate DD MM YYYY dayIs monday 在我的国家 一周的第一天是星期一 所以 我真的想检查输入日期是否是一周的开始 我尝试使
  • 即使我可以监视其他方法,也无法监视事件处理程序

    我想使用 Jest Jasmine Enzyme 测试 React 中的事件处理程序 MyComponent js import React from react class MyComponent extends React Compon
  • 通过 node-http-proxy 保留基于 cookie 的会话

    我有一个简单的基于 Express 的 Node js Web 服务器 用于开发 JavaScript 应用程序 我将服务器设置为使用 node http proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API
  • 单击关闭按钮后不显示 Google 一键登录 UI

    我正在尝试按照本指南使新的谷歌一键登录工作 https developers google com identity one tap web https developers google com identity one tap web
  • 将 javascript 整数转换为字节数组并返回

    function intFromBytes x var val 0 for var i 0 i lt x length i val x i if i lt x length 1 val val lt lt 8 return val func
  • Twitter 嵌入时间轴小部件

    我继续下载http platform twitter com widgets js http platform twitter com widgets js And the http platform twitter com embed t
  • 当用户单击链接时,如何记录 MixPanel 事件?

    当用户单击某种类型的链接时 我试图在 MixPanel 中记录一个事件 我正在使用 JQuery 不引人注意地完成此操作 据我所知 我需要添加一个回调函数 以便在记录事件后将用户带到 URL 这是我正在使用的代码 不幸的是
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • Nodejs mysql 获取正确的时间戳格式

    我在用着mysqljs https github com mysqljs mysql得到结果后sql我变得不同TimeStamp格式如下 created at Sat Jul 16 2016 23 52 54 GMT 0430 IRDT 但
  • 如何在 Google 地图 V3 中创建编号地图标记?

    我正在制作一张上面有多个标记的地图 这些标记使用自定义图标 但我还想在顶部添加数字 我已经了解了如何使用旧版本的 API 来实现这一点 我怎样才能在V3中做到这一点 注意 当您将鼠标悬停在标记上时 标题 属性会创建一个工具提示 但我希望即使
  • 单击引导分页链接时调用 jquery 函数

    我想在单击引导分页链接时调用 jquery 函数 假设我想从第1页遍历到第2页 应该调用一个jquery函数 我正在使用以下代码 但它不起作用 ul pagination on click li function alert page ch
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse

随机推荐

  • 查看系统使用率命令 vmstat 输出详解!

    使用效果
  • 凸包问题的五种解法

    原文 http blog csdn net yangkunpengd article details 51336453 凸包问题的五种解法 前言 首先 什么是凸包 说凸包首先要说凸性的定义 简单点说就是平面邻域中任意两点所在的线段上的点都在
  • LR(0)文法分析(通过例题穿插讲解)

    目录 LR 0 文法的字面含义 LR 0 分析表的构造 写在最后 LR 0 文法的字面含义 LR 0 分析法是其他LR分析法构造的基础 L表示从左往右扫描 R表示反向构造出一个最右推导 k表示向前看k个字符 缺省为1 在学习LR 0 分析时
  • Linux驱动框架与LED实战

    目录 驱动框架 相关文件 案例分析 LED驱动框架源码 led class c led class attrs leds class class结构体 led classdev register 某一类的设备创建 led classdev结
  • QT获取显示当前时间和日期

    获取当前时间和日期 QT中获取时间和日期的主要是 QTime QDate 和 QDateTime 这三个类 QTime 类 通过 QTime 类中提供的时间相关的方法 可以获取到当前系统时间 时 分 秒 毫秒 需要注意的是 计时的准确性由底
  • QWidget/QDialog主窗体设置边框圆角

    1 问题 QT中窗体QWidget和QDialog为容器 不能对窗体进行边框圆角样式改变 只能通过绘图QPainter 2 设置无上边框选项窗口 this gt setWindowFlags Qt Widget Qt FramelessWi
  • CSS学习笔记八——宽高自适应

    宽高自适应 一 宽度自适应 二 高度自适应 三 浮动元素的高度自适应 四 窗口自适应 五 结语 一 宽度自适应 不写宽度或者写 width auto就表示宽度自适应 可用于横栏或导航栏 与 width 100 不同 设为100 已经固定了宽
  • MySQL之无限级分类表设计

    首先查找一下goods cates表和table goods brands数据表 分别使用命令 root localhost test gt show columns from goods cates root localhost test
  • 【Spring源码】一:整体流程

    总流程 12 个方法 Prepare this context for refreshing prepareRefresh Tell the subclass to refresh the internal bean factory Con
  • 与焦虑同行,话技术领导者成长

    解码职场焦虑 系列直播第二期来啦 技术领导者在职场跃迁中 会因为各种内外因素的变化而产生焦虑 困惑 烦躁等情绪 我们该怎样与负面情绪共处 认识到局限 接纳并不完美的自己 从而稳步前行 技术Leader成长路上会面对哪些情绪挑战 高压和忙碌状
  • html提取信息变xml,网络爬虫笔记【7】 利用 XPATH 实现 XML 和 HTML 文本信息提取

    XML Extensible Markup Language 指可扩展标记语言 被设计用来传输和存储数据 HTML指的是超文本标记语言 Hyper Text Markup Language 是WWW上用于编写网页的主要工具 详细信息请参考
  • R语言做文本挖掘 Part3文本聚类

    Part3文本聚类 发现有人转载 决定把格式什么重新整理一遍 有时间做个进阶版文本挖掘 恩 原文地址 CSDN R语言做文本挖掘 Part3文本聚类 分类和聚类算法 都是数据挖掘中最常接触到的算法 分类聚类算法分别有很多种 可以看下下面两篇
  • 万字超详细的Java图书管理系统

    生命中的每个人都是一个故事 而每个故事都值得被讲述 作者 不能再留遗憾了 专栏 Java学习 该文章主要内容 用Java实现简单的图书管理系统 文章目录 前言 基本思路 书和书架 书Book类 书架BookList类 用户身份User 父类
  • Oracle : ORA-00001: unique constraint (SHULAN_TEST.SYS_C0026496) violated

    Caused by java lang IllegalStateException Can t overwrite cause with java sql SQLIntegrityConstraintViolationException O
  • Random Vectors and the Variance-Covariance Matrix

    Random Vectors and the Variance Covariance Matrix pdf 多维变量概率论 Definition 1 随机向量 x x 1
  • jsp与html,html与web语言的交互

    jsp 又名java Server Pages 用于开发动态网页 文件扩展名为jsp 优点 1 首先jsp是一种服务端技术 提供了动态接口 用于不断更改数据并调用服务器操作 2 jsp本身是一种编译好的Servlet文件 3 jsp基于ja
  • 给本科实验室的分享PPT续-回复各种问题

    谢邀 该分享主要面向实验室的大一 大二同学
  • Neo4J(Cypher语句)初识

    欢迎各路大神临幸寒舍 以下节点标签为people friend 用户自己也可以设置成其他标签 查询时需要用到标签 这个标签可以类比为关系数据库中的表名 创建节点 关系 创建节点 小明 create n people name 小明 age
  • FFmpeg音频处理——音频混合、拼接、剪切、转码

    接触FFmpeg有一段时间了 它是音视频开发的开源库 几乎其他所有播放器 直播平台都基于FFmpeg进行二次开发 本篇文章来总结下采用FFmpeg进行音频处理 音频混合 音频剪切 音频拼接与音频转码 采用android studio进行开发
  • 一篇搞定React生命周期以及执行顺序 v16.8+(前端面试整理)

    React 组件生命周期 从事前端工作已经有一段时间 最近在面试求职者的时候发现 React最基础的实例生命周期都说不清楚 也不能说清楚每个生命周期方法具体作用 所以我通过代码 官网文档的形式总结下文 React生命周期可以说是react最