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

  • 水利建设基金按照增值税征收
  • 税控盘为什么要年年交服务费
  • 完税证明能作为理赔依据吗
  • 电子税务局自然人如何注册
  • 动产租赁和不动产哪个好
  • 商品流通企业商品流转的核算方法有
  • 海关完税凭证如何抵扣进项税
  • 小规模建筑企业预缴税款
  • 境内企业得到境外企业的红利是否需要缴纳所得税?
  • 增值税发票增量流程网上怎么申请
  • 广告制作选哪个专业好
  • 税收分类编码选错了会罚款么
  • 企业房租收入营改增
  • 金税四期什么时候结束
  • 外籍人士享受满五唯一吗
  • 进项税和销项税税率一样吗
  • 商贸公司开办费用
  • 母子公司可以汇资金吗
  • 固定资产提前报废账务处理
  • 消费税的附加税和增值税的附加税
  • 支付固定资产运杂费计入什么科目
  • 结转出租设备的会计分录
  • 单位出纳的业务有哪些
  • 票据权利消灭是啥意思
  • 固态硬盘如何接入电脑
  • 资产减值损失在哪个表
  • 职工医保报销会扣医保卡的钱吗
  • 上飞机可以带2个充电宝吗
  • cuda运行环境
  • Realsense D455/435内参标定以及手眼标定
  • HTML布局方式
  • 训练自己的GPT模型 中文改英文
  • 银行存款账面余额与银行账户余额
  • php短链接api
  • 个人独资企业的特点
  • 冲红的销项税怎么结转
  • vue3 hooks实现
  • react脚手架搭建项目
  • testdisk安装方法
  • 事业单位无形资产折旧是当月还是下月
  • java基础运算符有哪些
  • 商品售后回购分录
  • 政府专项基金是什么
  • 未满一年需要工商年报吗
  • mysql 网页用户界面
  • 管理费用核算的是
  • 银行承兑汇票是什么意思
  • 基建账是否为可不并入大账
  • 主营业务成本如何设置明细
  • 长期股权投资账务处理实例
  • 你知道实施“营改增”对企业有哪些积极的效应么?
  • 固定资产更新改造当月是否计提折旧
  • 长期股权投资利润调整加折旧
  • 开票需要缴纳印花税吗
  • 资产评估资产如何入帐
  • 税控设备设置在哪儿
  • 费用设置的明细科目
  • 将sql语句的执行状态传递给主语言的是
  • CentOS中httpd源代码安装与测试步骤分享
  • windows7 设置
  • WIN10系统中断
  • linux中tailf命令
  • js实现dialog
  • linux执行sh文件报错找不到
  • node 执行js
  • js if语句怎么写
  • linux查看内存型号与数量
  • python xml.dom.minidom模块生成xml
  • shell脚本实现文件管理
  • 安装下载应用
  • Unity3D中Enabled、Destroy与Active的区别
  • javascript高级程序设计pdf下载
  • js html css
  • 安卓竖屏改横屏
  • python读写文件wr
  • 四川省国税局一处处长
  • 未到申报期可以提前抄税吗
  • 小规模纳税人一年500万一年怎么算
  • 山东省关于公务员社会信用考察的规定
  • 江西省地税局官方网站
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设