位置: IT常识 - 正文

React组件的生命周期函数(react组件constructor)

编辑:rootadmin
React组件的生命周期函数 文章目录React组件生命周期认识生命周期生命周期函数不常用生命周期函数React组件生命周期认识生命周期

推荐整理分享React组件的生命周期函数(react组件constructor),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react组件声明,react组件生命周期函数,react组件生命周期嵌套执行顺序,react组件生命周期函数,react组件生命周期的三个阶段,react组件生命周期函数,react组件生命周期三个状态,react组件的生命周期,内容如对您有帮助,希望把文章链接给更多的朋友!

很多的事物都有从创建到销毁的整个过程,这个过程称之为是生命周期;

React组件也有自己的生命周期,了解组件的生命周期可以让我们在最合适的地方完成自己想要的功能;

生命周期和生命周期函数的关系如下:

生命周期是一个抽象的概念,在生命周期的整个过程,分成了很多个阶段;

比如装载阶段(Mount),组件第一次在DOM树中被渲染的过程;

比如更新过程(Update),组件状态发生变化,重新更新渲染的过程;

比如卸载过程(Unmount),组件从DOM树中被移除的过程;

React内部为了告诉我们当前处于哪些阶段,会对我们组件内部实现的某些函数进行回调,这些函数就是生命周期函数:

比如实现componentDidMount函数:组件已经挂载到DOM上时,就会回调;

比如实现componentDidUpdate函数:组件已经发生了更新时,就会回调;

比如实现componentWillUnmount函数:组件即将被移除时,就会回调;

我们可以在这些回调函数中编写自己的逻辑代码,来完成自己的需求功能;

我们谈React生命周期时,主要谈的类的生命周期,因为函数式组件是没有生命周期函数的;(后面我们可以通过hooks来模拟一些生命周期的回调)

生命周期函数

我们先来学习一下最基础、最常用的五个生命周期函数:

Constructor

组件中第一个调用的生命周期函数, 如果不初始化 state 或不进行方法绑定,则不需要为 React 组件实现构造函数。

constructor中通常只做两件事情:

通过给 this.state 赋值对象来初始化内部的state;为事件绑定实例(this);

render

render函数也是组件的生命周期函数, 它的使用方法上一篇文章有讲解过, 这里不再过多赘述

componentDidMount

React组件的生命周期函数(react组件constructor)

componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用。

componentDidMount中通常进行哪里操作呢?

依赖于DOM的操作可以在这里进行;在此处发送网络请求就最好的地方;(官方建议)可以在此处添加一些订阅(会在componentWillUnmount取消订阅);

componentDidUpdate

componentDidUpdate() 会在更新后会被立即调用,首次渲染不会执行此方法。

当组件更新后,可以在此处对 DOM 进行操作;

如果你对更新前后的 props 进行了比较,也可以选择在此处进行网络请求;(例如,当 props 未发生变化时,则不会执行网络请求)。

componentWillUnmount

componentWillUnmount() 会在组件卸载及销毁之前直接调用。

在此方法中执行必要的清理操作;

例如,清除 timer,取消网络请求或清除在 componentDidMount() 中创建的订阅等;

上面这五个生命周期函数是我们最常用的, 它们的执行时机可以参考下面这幅图片

首先执行constructor函数

其次执行render函数, 将render函数的结果进行渲染

紧接着会将组件挂载到DOM上, 挂载完成执行componentDimMount函数

当数据发生改变, 会重新调用render函数, 等待数据更新完成后会调用componentDidUpdate函数

组件卸载或销毁之前, 调用componentWillUnmount

演示代码

export class App extends Component { constructor() { console.log("constructor被调用") super() this.state = { message: "Hello World" } } btnClick() { this.setState({ message: "你好啊" }) } render() { console.log("render被调用") const { message } = this.state return ( <div> <button onClick={() => this.btnClick()}>按钮</button> <h2>{ message }</h2> </div> ) } componentDidMount() { console.log("componentDidMount被调用") } componentDidUpdate() { console.log("componentDidUpdate被调用") } componentWillUnmount() { console.log("componentWillUnmount被调用") }}不常用生命周期函数

除了上面介绍的生命周期函数之外,还有一些不常用的生命周期函数(注意这个不常用不是我说的, 实在React官网中, 官方列举的):

下面三个不常用的生命周期getSnapshotBeforeUpdate和shouldComponentUpdate是相对有用的

getDerivedStateFromProps:state 的值在任何时候都依赖于 props时使用;该方法返回一个对象来更新state;

getSnapshotBeforeUpdate:在React更新DOM之前回调的一个函数,可以获取DOM更新前的一些信息(比如说滚动位置);

shouldComponentUpdate:该生命周期表示, 是否需要重新更新render函数进行渲染, 返回true表示需要, 返回false表示不需要, 这个生命周期函数还是很常用,但是我们等待讲性能优化时再来详细讲解;

另外,React中还提供了一些过期的生命周期函数,这些函数已经不推荐使用。

更详细的生命周期相关的内容,可以参考官网: https://zh-hans.reactjs.org/docs/react-component.html

本文链接地址:https://www.jiuchutong.com/zhishi/300848.html 转载请保留说明!

上一篇:什么是 Web 3.0?(新手入门指南)(什么是男人无力的行为)

下一篇:Python 爬虫案例(python爬虫案例题目)

  • 网上怎么办理电话卡(怎么申请网上购电)

    网上怎么办理电话卡(怎么申请网上购电)

  • qq传播敏感信息冻结七天怎么解封(qq传播违法信息)

    qq传播敏感信息冻结七天怎么解封(qq传播违法信息)

  • 通过小米订单号怎样查询物流(通过小米订单号查手机号)

    通过小米订单号怎样查询物流(通过小米订单号查手机号)

  • 苹果手机密码输错多少次就会永久停用(苹果手机密码输错一次就锁屏一小时怎么解除)

    苹果手机密码输错多少次就会永久停用(苹果手机密码输错一次就锁屏一小时怎么解除)

  • 高通850和i5性能对比(i5和高通850的区别有多大)

    高通850和i5性能对比(i5和高通850的区别有多大)

  • 三星note8频繁自动重启(三星note8屡次停止)

    三星note8频繁自动重启(三星note8屡次停止)

  • OTG转接线怎么用(OTG转接线怎么用?)

    OTG转接线怎么用(OTG转接线怎么用?)

  • 录屏怎么录一小块区域(录屏怎么录一小块)

    录屏怎么录一小块区域(录屏怎么录一小块)

  • ai通话是什么意思(ai通话有什么功能)

    ai通话是什么意思(ai通话有什么功能)

  • b350支持三代锐龙吗(b350支持4代锐龙)

    b350支持三代锐龙吗(b350支持4代锐龙)

  • qq扩列为什么一直匹配失败啊(qq扩列为什么一直频繁)

    qq扩列为什么一直匹配失败啊(qq扩列为什么一直频繁)

  • 小米手机自动关机设置在哪里(小米手机自动关声音怎么回事)

    小米手机自动关机设置在哪里(小米手机自动关声音怎么回事)

  • 腾讯会议会议号怎么弄(腾讯会议会议号是什么意思)

    腾讯会议会议号怎么弄(腾讯会议会议号是什么意思)

  • 电脑充电时可以使用吗(电脑充电时可以关机吗)

    电脑充电时可以使用吗(电脑充电时可以关机吗)

  • qq收藏图片删了怎么恢复(qq收藏图片删了电脑怎么恢复)

    qq收藏图片删了怎么恢复(qq收藏图片删了电脑怎么恢复)

  • 服务器运行失败是怎么回事(mp4文件服务器运行失败)

    服务器运行失败是怎么回事(mp4文件服务器运行失败)

  • 电脑上聊天怎么艾特别人(电脑上聊天怎么发送)

    电脑上聊天怎么艾特别人(电脑上聊天怎么发送)

  • 安卓手机qq下载的文件在哪里(安卓手机qq下载安装2019版)

    安卓手机qq下载的文件在哪里(安卓手机qq下载安装2019版)

  • ios13怎么更新应用(ios13版软件怎么更新)

    ios13怎么更新应用(ios13版软件怎么更新)

  • 怎么会显示正在输入(正在 正 在)

    怎么会显示正在输入(正在 正 在)

  • 微信消息删除后能恢复吗(微信消息删除后对方还能看到吗)

    微信消息删除后能恢复吗(微信消息删除后对方还能看到吗)

  • 苹果8显示屏是2k吗(苹果8显示屏多大)

    苹果8显示屏是2k吗(苹果8显示屏多大)

  • 小米手环深睡时间准确吗(小米手环深睡时长多久正常)

    小米手环深睡时间准确吗(小米手环深睡时长多久正常)

  • 抖音怎么上热门几率高(电脑抖音怎么上热门)

    抖音怎么上热门几率高(电脑抖音怎么上热门)

  • oppo通用设置在哪里(oppo手机的通用设置在哪)

    oppo通用设置在哪里(oppo手机的通用设置在哪)

  • 苹果中国区App Store充值购买教程(苹果中国区副总裁)

    苹果中国区App Store充值购买教程(苹果中国区副总裁)

  • 个人所得税C表怎么填写
  • 股票权类型
  • 增值税附加税税率是多少
  • 售后回购确认为租赁的
  • 保理利息计算公式
  • 房地产企业配套设施的核算内容
  • 城建税如何核算成本
  • 商贸企业收到的检测费可以抵扣进项税吗
  • 新公司接手之前公司的固定资产
  • 接受投资者的无形资产
  • 印花税的计税依据含税吗
  • 销售商品会计凭证
  • 如何辩别这样发票的真伪?
  • 电费冲销是什么意思
  • 收到认证费用计入什么科目
  • 多缴税款如何办理退税
  • 营业成本包括哪些会计科目
  • 纳税单位与免税单位共用的房屋由纳税单位全额纳税
  • 企业安全库存是什么
  • 价款包括增值税税率吗
  • windows10出现你的电脑出现问题
  • php fork
  • 销售人员奖励办法
  • 入库前的准备
  • 总公司人员的工资子公司发,如何报税?
  • 股本减少的账务怎么处理
  • 双轨制会计核算原则
  • 土地增值税的计算
  • display version命令
  • php执行另一个php
  • 律师费怎么要回来
  • 上个月成本做多了怎么冲账
  • 税务局开普票需要什么材料
  • 预缴增值税附加税
  • 织梦图片集如何调用
  • mysql备份导入
  • 简述sql server
  • 预付卡发票如何开
  • 无偿受让股权是利好吗
  • 计提坏账准备和确认坏账损失
  • 文化事业建设费2023年是否减免了
  • 事业单位收到发票怎么处理
  • 闽侯县安置房交易缴纳土地出让金
  • 地下车库的成本包括哪些
  • 递延所得税资产和负债账务处理
  • 公司一年发两次奖金
  • 公司费用怎么做账
  • 进账单,其中有两个账户
  • 电力安装工程合同税率能开13%
  • 备用金预期有什么影响
  • 进货没开发票,销货却开发票应怎么做帐?
  • 股东分派现金股利怎么算
  • grub2引导win10
  • windows10x预览版
  • linux file-nr
  • win32k.sys是什么
  • windows的使用
  • 如何解决焦虑的心理
  • 用户账户限制
  • win10桌面版微信连不上网
  • windows xp删除所有数据
  • iis搭建php环境
  • windowsxp打不开
  • windows xp快捷键设置在哪
  • win8免密码登录
  • windows7更新补丁后蓝屏
  • win7系统搜索功能没了
  • 在dos中文件是以什么目录结构
  • 骨头动漫头像
  • 图片批量压缩到200k以下
  • 批处理文件(.bat)怎么写?
  • css超出内容隐藏
  • jquery左右移动动画效果
  • cmd文件操作基本命令清单
  • jquery常用操作
  • python parser解析
  • 使用jquery实现的项目
  • 查账征收个人经营所得税怎么申报
  • 仓储用地和物流用地划分
  • 江苏电子口岸卡邮寄大概需要多久
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设