从vue2到vue3,生命周期函数有何变化之详解

news2024/11/18 13:35:00

vue2与vue3生命周期的对比:

Vue2--------------Vue3

beforeCreate—————–>setup()
created————————>setup()

beforeMount—————–>onBeforeMount
mounted—————-------> onMounted
beforeUpdate -————–> onBeforeUpdate
updated -—————------> onUpdated
beforeDestroy ————> onBeforeUnmount
destroyed ——————> onUnmounted

activated --------------------> onActivated
deactivated -----------------> onDeactivated
errorCaptured -------------> onErrorCaptured

总结:Vue2和Vue3钩子变化不大,删除了beforeCreate、created两个钩子使用setup()钩子来替代。

vue2的生命周期

在这里插入图片描述

  • new Vue()
    创建一个Vue实例

  • Init Events&Lifecycle
    创建前:
    DOM对象:el:undefined
    data对象: data:undefined
    声明的变量:message:undefined

  • Init injections & reactivity
    创建完毕:
    DOM对象:el:undefined
    data对象: data:[object Object]
    声明的变量:message:undefined

在这里插入图片描述
整体阶段开始编译模版,根据data中的数据和指令生成HTML,此时还没有开始渲染,仅存在于内存中。

  • beforeMount
    挂载前
    完成模版编译,但是还未挂载到页面。
    DOM对象:el:undefined
    data对象: data:[object Object]
    声明的变量:message:“Vue的生命周期”
  • mounted
    挂载结束,已渲染到页面。
    DOM对象:el:[object HTML DivElement]
    data对象:data:[object Object]
    声明的变量:message:”Vue的生命周期“
  • beforeUpdate
    更新前状态
    状态更新之前执行,此时data中的状态值是最新的,但界面还没开始渲染,是旧数据
    DOM对象:el:[object HTMLDivElement]
    data对象:data:[object Object]
    声明的变量:message:“被修改了”
  • updated
    更新完成
    状态更新完成后执行,此时界面显示data的最新数据,即界面已被渲染
  • beforeDestroy
    销毁前
    实例准备销毁,但还没被销毁,实例属性方法还可以用
    DOM对象:el:[object HTMLDivElement]
    data对象:data:[object Object]
    声明的变量:message:“Vue的生命周期”
  • destoryed
    销毁完成
    实例已销毁,所有内容均不可使用
    DOM对象:el:[object HTMLDivElement]
    data对象:data:[object Object]
    声明的变量:message:“Vue的生命周期”

beforeCreate():实例在内存中被创建出来,还没有初始化好data和methods属性
create():实例已经在内存中创建,已经初始化好data和method,此时还没有开始编译模版。
beforeMount():已经完成了模版的编译,还没有挂载到页面中。
mounted():将编译好的模版挂在到页面指定的容器中显示。
beforeUpdate():状态更新之前执行函数,此时data中的状态值是最新的,但是界面上显示的数据还是旧的,因为还没有开始重新渲染DOM节点。
updated():此时data中的状态值和界面上显示的数据都已经完成了更新,界面已经被重新渲染好了!
beforeDestroy():实例被销毁之前。
destroyed():实例销毁后调用,Vue实例指示的所有东西都会解绑,所有的事件监听器都会被移除,所有的子实例也都会被销毁。组件已经被完全销毁,此时组件中所有的data、methods以及过滤器,指令等,都已经不可用了。

在实际开发中的使用:

beforeCreate: 可以在这函数中初始化加载动画
created:做一些数据初始化,实现函数自执行
mounted:调用后台接口进行网络请求,拿回数据,配合路由钩子做一些事情
destoryed:当前组件已被删除,清空相关内容
mounted中做网络请求和重新赋值,在destoryed中清空页面数据。

还有个比较特殊的钩子函数nextTick(),数据更新后的dom操作,写在该函数里面

vue3的生命周期

在这里插入图片描述

setup():开始创建组件之前,在beforeCreated和created之前执行,创建的是data和method
onBeforeMount():组件挂载到节点上之前执行的函数;
onMounted():组件挂载完成后执行的函数;
onBeforeUpdate():组件更新之前执行的函数;
onUpdate():组件更新完成之后执行的函数;
onBeforeUnmount():组件卸载之前执行的函数;
onUnmounted():组件卸载完成后执行的函数;
onActivated():被包含在< keep-alive >中的组件,会多出两个生命周期钩子函数,被激活时执行;
onDeactivated():比如从A组件,切换到B组件,A组件消失时执行;
onErrorCaptured():当捕获一个来自子孙组件的异常时激活钩子函数。

代码:

<script>
import {ref,onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted} from 'vue'
export default {
  name: 'Demo',
  setup() {
    //数据
    let sum = ref(0)
    //通过配置项的形式使用生命周期钩子
    onBeforeMount(()=>{
      console.log('----onBeforeMount----')
    })
    
    onMounted(()=>{
      console.log('----onMounted----')
    })
    onBeforeUpdate(()=>{
      console.log('----onBeforeUpdate----')
    })
    onUpdated(()=>{
      console.log('----onUpdated----')
    })
    onBeforeUnmount(()=>{
      console.log('----onBeforeUnmount----')
    })
    onUnmounted(()=>{
      console.log('----onUnmounted----')
    })
    //返回一个对象
    return{
      sum,
    }
  }
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正则表达式入门级别详细教程

文章目录常用正则表表达式01、火车车次02、手机机身码(IMEI)03、必须带端口号的网址(或ip)04、网址(URL)05、统一社会信用代码06、迅雷/ed2k/磁力链接07、子网掩码(不包含 0.0.0.0)08、Linux/windows文件路径09、股票代码(A股)10、大于等于0, 小于等于150, 支持小数位出现5, 如…

手把手教你编写Python抢购脚本

想买苹果手机&#xff0c;但总是抢不到&#xff0c;所以想试着能不能写个脚本代码。 第一步&#xff1a;把想要抢购的商品加进购物车&#xff0c;注意&#xff1a;脚本是对购物车内全部商品进行下单操作&#xff0c;所以不够买的商品最好先从购物车内删除。 第二步&#xff1a…

网络安全这玩意儿真不建议一般人学...

前言 作为一名5年网安工程师老菜鸟来说&#xff0c;我实在想不通&#xff0c;开发岗位那么多&#xff0c;为什么要来学网安? 在这里怕是要给准备入坑的同学泼盆冷水了&#xff0c;网络安全这东西真不建议一般人学... 基础确实很简单&#xff0c;是个人稍微认点真都能懂&…

20221205英语学习

今日新词&#xff1a; abort v.中止, 流产, 放弃, 堕胎 motor adj.有引擎的, 由发动机推动的, 机动车的, 汽车的 flag n.旗, 标志旗, 菖蒲, 旗帜&#xff08;指某国家或组织及其信仰和价值观&#xff09; August n.八月 division n.&#xff08;主要&#xff09;部门&…

数据可视化之疫情可视化

一 前言 新型冠状病毒肺炎&#xff08;COVID-19&#xff0c;简称“新冠肺炎”&#xff09;疫情肆虐全球多个国家&#xff0c;2020年3月11日&#xff0c;世界卫生组织 (WHO) 正式宣布将新冠肺炎列为全球性大流行病。 在全球抗击新型冠状病毒疫情的过程中&#xff0c;产生了前所…

网络管理——直接网络管理规范

逻辑环 逻辑环机制 每个逻辑节点都有一个逻辑地址&#xff0c;且每个节点有一个后继节点&#xff0c;从而建立一个逻辑环。后继节点定义为&#xff1a;按照NM 地址段节点地址大小排列&#xff0c;小地址节点→大地址节点依次传递网络管理报文&#xff1b;最大地址节点→最小地…

【IoT】产品经理:如何了解行业需求、痛点和发展机会?

需求、痛点、发展机会是跟你所处行业的密切相关的&#xff0c;只有融入这个行业&#xff0c;才能更好地理解需求和痛点。 1、避免一叶障目 你需要做到避免只见树木不见森林&#xff0c;避免自己局限于细节而忽视了全局。 我们对部分的理解再深刻&#xff0c;也无法得到对整体的…

年薪90万男子嫌无聊起诉公司?用任务软件飞项充实工作吧!

每天正常上下班&#xff0c;毫无工作压力&#xff0c;这样的神仙工作是不是你期望的&#xff1f;但最近有个奇葩的新闻引起了网友的热议。就是这样的工作&#xff0c;但“身在福中不知福”的男子米尔斯&#xff0c;却将公司给起诉了&#xff0c;理由是“太无聊”。据报道&#…

SpringCloud框架(二):整合Eureka作为注册中心、Feign进行远程调用、Ribbon实现负载均衡,底层源码解读

环境搭建 生产和消费 RestTemplate&#xff0c;底层源码解读SpringCloud环境搭建&#xff1a;生产和消费 RestTemplate整合Eureka和Feign引入Eureka服务注解中心替代RestTemplate&#xff1f;通过openFegin进行调用当一个请求多次落到一个服务上&#xff0c;其他服务如何平衡这…

【Python项目】毕业设计必备——Python实现一个GUI版本的学生信息管理系统 | 附源码

前言 halo&#xff0c;包子们上午好 很多学计算机的小伙伴应该都知道&#xff0c;毕业设计是一个头疼的东西 今天的话小编这边给大家准备好了一个Python版本的毕业设计课题——学生管理系统 说实话操作起来还是有那么一点点的难度的&#xff0c;但是大家不用担心 作为一个宠粉…

SSM框架学习记录-Spring_day02

1.IOC/DI配置管理第三方bean 之前都是基于自己写的类&#xff0c;如果有需求去管理第三方Jar包中的类&#xff0c;该如何管理? 案例:数据源对象管理 使用Spring的IOC容器来管理Druid连接池对象 思路分析 要使用第三方的技术&#xff0c;需要在pom.xml添加依赖 在配置文件中将…

CloudKit教程之如何从 CloudKit 获取图像资源到 SwiftUI 应用程序

最近,我研究了 CloudKit API 文档,并尝试将数据库和资产集成到我的应用程序中。这是我的一些发现,希望对您有所帮助…… 想要从 iCloud 公共数据库获取图像资产到他们的 SwiftUI 应用程序的 Apple 开发人员而写的。 将 Sign in with Apple 集成到 CloudKit 新建 Xcode 项…

CSRF漏洞利用与防御

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是CSRF漏洞利用与防御。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未授权设…

Spring更简单的存储和读取Bean

⭐️前言⭐️ 在上一篇文章【Spring的创建与使用】中&#xff0c;我们已经了解了Spring中bean对象的基本的创建和使用方法&#xff0c;这篇文章通过注解的方法&#xff0c;使得存储和读取对象更加简单。 &#x1f349;博客主页&#xff1a; &#x1f341;【如风暖阳】&#x1…

[附源码]计算机毕业设计JAVA疫情背景下社区公共卫生服务系统

[附源码]计算机毕业设计JAVA疫情背景下社区公共卫生服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a…

分布式事务最终一致性的方案

最终一致性的方案 知识储备 分布式系统中不可避免存在分布式事务带来的一致性问题。为了解决这个问题&#xff0c;需要熟悉业界相关的理论&#xff1a; ACID CAP BASE 2PC 3PC TCC 对于一致性的处理&#xff0c;分为强一致和最终一致性。强一致&#xff0c;对系统的吞吐…

cox回归RCS阈值效应函数cut.tab1.3发布

写在前面的话&#xff0c;本次只发布了cox回归RCS阈值函数&#xff0c;请看清楚再购买&#xff0c;觉得贵的可以等一等&#xff0c;这个函数最终会放在ggrcs包上面&#xff0c;免费供大家使用&#xff0c;急用的可以先看看。 接下来聊聊cox回归RCS阈值函数是干什么用的&#xf…

[附源码]Python计算机毕业设计SSM江西婺源旅游文化推广系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Python入门 函数 基础入门篇

一、什么是函数 函数是最基本的一种代码抽象的方式&#xff0c;是组织好的可重复使用的&#xff0c;用来实现单一或相关联功能的代码段。 函数是对做相似的事情或相似的动作进行封装&#xff0c;它能提高应用的模块性和代码的重复利用率。我们要封装好一个函数&#xff0c;首…

[附源码]计算机毕业设计设备运维平台出入库模块APPSpringboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…