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

  • 企业所得税从业人数怎么填,依据什么填写
  • 金融企业哪些方面可以进行数据分析
  • 财务管理考试时间多长
  • 安装费人工费有什么不一样
  • 银行理财算投资吗
  • 一笔多少钱
  • 出差租车费用报销标准
  • 企业为员工租房账务处理
  • 个人房产房租收入怎么算
  • 其他货币资金包括的内容有
  • 出口报关单上的运费和保费和实际不一致
  • 房地产公司扣减土地出让金怎么入账?
  • 没有资质的建筑公司怎样接工程
  • 冬虫夏草开票什么税率
  • 个人独资企业免税销售额
  • 小微企业几个人
  • 公司单独买医保
  • 转出未交增值税怎么算
  • 水利建设专项收入怎么计算
  • 增值税降为13
  • 个人所得税怎么交的,怎么算的
  • 购买债券发生的交易费用计入哪个科目
  • 电子发票转收入怎么做为记账凭证?
  • 创新券兑付怎么操作
  • 红字发票是销货单据吗
  • 净现值法的优点包括
  • win10更新21h1后很卡
  • 公网访问内网主机
  • 公司股权分红会交税吗
  • PHP:imagegrabwindow()的用法_GD库图像处理函数
  • 企业破产是不是要没收法人家里全部财产
  • 预付装修款账务处理
  • mapbox wms
  • 不能进行加计扣除的研发费用有哪些
  • 深红玫瑰鹦鹉多钱一个
  • vue查看图片组件
  • 金税盘显示242104
  • 微信小程序基于什么框架
  • php100 jquery教程
  • mysql分区实现
  • 补缴去年的税款会计分录
  • 置顶文章
  • 企业可以收付实现制记账吗
  • 金蝶k3现金流量表编制如何生成数据
  • 公司发放给员工的出差补助需要合并计算个税吗
  • 公司股票买卖账务处理
  • 将原生html改成vue
  • 超预算支出违反什么规定
  • 食堂的帐怎么做
  • 一般纳税人开具3%专票的条件
  • 外地预缴税款流程
  • 房地产成本核算对象
  • 工程主营业务收入会计分录
  • 职工医保报销会扣医保卡的钱吗
  • 实报实销有补贴嘛
  • 未开票收入如何申报增值税
  • 开业费用是什么意思
  • 建筑企业外地预缴
  • 银行承兑汇票记载事项
  • 企业申请支付宝账号步骤
  • 坏账准备计入营业外支出什么明细
  • 会计科目的设置原则包括( )
  • sql server key
  • centos7搭建nfs详细步骤
  • solaris8+apache2+weblogic813+db2_82客户端+128 安装过程
  • ctd module
  • windowsxp的磁盘管理在哪
  • windows xp系
  • centos6 docker
  • excel表格用windows7打不开
  • opengl perspective
  • unity 3d场景2d角色
  • android 点击按钮如果数据库有数据就更新,没有就创建
  • js调用图片代码
  • jquery获取元素css
  • jquery点击事件写法
  • jquery滚动条滚动到指定位置
  • 上海税务局电话多少号
  • 多缴税款可以抵顶以后欠费的税款吗
  • 出口货物开票税率是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设