位置: 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爬虫案例题目)

  • 小艺是什么手机的语音助手(小艺是什么手机的助手)

    小艺是什么手机的语音助手(小艺是什么手机的助手)

  • iqooz5x和平精英能开多少帧

    iqooz5x和平精英能开多少帧

  • 为什么电脑屏幕出现两层(为什么电脑屏幕不显示,但是开机了)

    为什么电脑屏幕出现两层(为什么电脑屏幕不显示,但是开机了)

  • 微信etc激活不了(微信etc激活后 需要充值吗)

    微信etc激活不了(微信etc激活后 需要充值吗)

  • 腾讯会议可以录播吗(腾讯会议可以录屏吗手机)

    腾讯会议可以录播吗(腾讯会议可以录屏吗手机)

  • 怎么把下载的视频保存到手机相册(怎么把下载的视频转为mp3)

    怎么把下载的视频保存到手机相册(怎么把下载的视频转为mp3)

  • 电脑死机怎么关机(电脑死机了按什么键关机)

    电脑死机怎么关机(电脑死机了按什么键关机)

  • 微信发朋友圈只发文字怎么发(微信发朋友圈只允许一个人看,对方会知道吗)

    微信发朋友圈只发文字怎么发(微信发朋友圈只允许一个人看,对方会知道吗)

  • 苹果手机看不见未接来电怎么办(苹果手机看不见的特殊符号)

    苹果手机看不见未接来电怎么办(苹果手机看不见的特殊符号)

  • qq授权110509怎么解决(qq授权110509怎么回事)

    qq授权110509怎么解决(qq授权110509怎么回事)

  • 华为mate30pro发热正常吗(华为mate30pro发热怎么解决)

    华为mate30pro发热正常吗(华为mate30pro发热怎么解决)

  • 用快捷键切换中英文输入方法时按什么键(用快捷键切换中英文输入为)

    用快捷键切换中英文输入方法时按什么键(用快捷键切换中英文输入为)

  • 无线插座是无线传电吗(无线插座是无线充电器吗)

    无线插座是无线传电吗(无线插座是无线充电器吗)

  • 华硕笔记本黑屏唤不醒(华硕笔记本黑屏了怎么办)

    华硕笔记本黑屏唤不醒(华硕笔记本黑屏了怎么办)

  • 虚拟号段和正常号段的区别(虚拟号段和正常号段的优劣)

    虚拟号段和正常号段的区别(虚拟号段和正常号段的优劣)

  • 网站视频播放不了怎么解决(网站视频播放不了只有图片)

    网站视频播放不了怎么解决(网站视频播放不了只有图片)

  • 手机显示hd怎么关闭(手机显示HD怎么消除)

    手机显示hd怎么关闭(手机显示HD怎么消除)

  • x30左边按键什么功能(vivo x30左侧按键干啥用的)

    x30左边按键什么功能(vivo x30左侧按键干啥用的)

  • 微信朋友圈只有一条线是怎么回事(微信朋友圈只有好友才能看到吗)

    微信朋友圈只有一条线是怎么回事(微信朋友圈只有好友才能看到吗)

  • 华为mate30pro原厂膜要撕吗(华为mate30pro原厂充电器型号)

    华为mate30pro原厂膜要撕吗(华为mate30pro原厂充电器型号)

  • 淘宝背景色在哪儿改(淘宝背景怎么换颜色)

    淘宝背景色在哪儿改(淘宝背景怎么换颜色)

  • 索尼相机的nfc在哪(索尼相机nfc功能)

    索尼相机的nfc在哪(索尼相机nfc功能)

  • 阿里通可以查到机主吗(阿里通信如何查询余额)

    阿里通可以查到机主吗(阿里通信如何查询余额)

  • ixl是什么(ix是什么意思中文)

    ixl是什么(ix是什么意思中文)

  • 微信怎么把聊天记录发给别人(微信怎么把聊天隐藏)

    微信怎么把聊天记录发给别人(微信怎么把聊天隐藏)

  • iphone下载的视频在哪里(iPhone下载的视频相册不显示)

    iphone下载的视频在哪里(iPhone下载的视频相册不显示)

  • 苹果xs电池多大(苹果xs换电池多少钱)

    苹果xs电池多大(苹果xs换电池多少钱)

  • 苹果官方翻新机和新机的区别(苹果官方翻新机能用吗)

    苹果官方翻新机和新机的区别(苹果官方翻新机能用吗)

  • 所得税费用会计分录
  • 企业如何代扣代缴个人所得税20%
  • 会计凭证销毁方法
  • 盘盈固定资产明细账怎么填写?
  • 企业人员信息已存在无需新增
  • 发票中奖要交税吗
  • 房地产企业承担的债务
  • 税收滞纳金计税吗
  • 资产收购应如何计算
  • 审计范围包括什么内容
  • 预收购货单位货款
  • 高危职业人身意外险
  • 一般纳税人进项发票认证操作流程
  • 服务费公司的账务处理
  • 建筑业小规模纳税人认定标准
  • 所得税退税需要多久
  • 已认证的发票开红字红发要去税局吗
  • 网络科技定额发票怎么做分录?
  • 资产损失税前扣除
  • 积分兑换的话费在使用后不再累计消费积分是什么意思
  • 存货跌价准备用账面余额还是账面价值
  • 个税退手续费要多久到账
  • windows7iis安装
  • windows为什么从7开始
  • 国家信用信息公司系公示
  • windows7为什么不能用了
  • linux系统文件压缩命令
  • php正则匹配字符串
  • 在win10中显示我的电脑
  • lcasensor是什么进程
  • 栅格布局实现
  • zentaophp框架
  • 工资一定要对公发吗
  • node l
  • yolov5 output
  • pytorch广播相乘
  • openprop教程
  • php xml转数组
  • php url函数
  • python合并多个excel
  • 永续债偿付顺序
  • 企业境外收入境内申报
  • python类的继承与多态
  • 织梦网站怎么改logo
  • 织梦怎么改网站主页
  • 增值税年底抵扣
  • 国家研发费用补助
  • 2023小型微利企业税收优惠
  • 土地使用权转让合法吗
  • 企业进项税和销项税怎么抵扣
  • 企业会计人员审计程序
  • 简易计税方法缴纳城建税和教育税
  • 工资扣员工的罚款入什么科目
  • 借款合同相关法条
  • 供应商质量索赔流程
  • 本期应征增值税销售额是什么意思
  • 账面价值,账面净值,账面余额三者的区别
  • 营业执照可以注册几个抖音号
  • 新建公司需要什么
  • 迅速修复系统漏洞的方法
  • linux 编译命令
  • vmmem进程是什么
  • windows怎么定位
  • mac 硬盘数据恢复
  • WindowsPE与WindowsRE有什么区别
  • win10h2版本
  • win10一年更新几次
  • linux给文件赋全部权限
  • Quick cocos2dx-Lua(V3.3R1)学习笔记(7) ---计时器,我是个定时吃饭睡觉的好孩子
  • opengl颜色混合模式
  • window系统设置
  • linux如何配置jdk
  • 基于jQuery的ajax方法封装
  • python中遍历
  • Jquery ajax请求导出Excel表格的实现代码
  • js获取鼠标点击位置
  • 青岛新农合咨询电话
  • 个人所得税税率怎么算
  • 金税盘里的发票清单怎么导出
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设