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

news2025/1/9 15:11:58

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/65224.html

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

相关文章

Spring Boot自动配置原理(Spring Boot面试题)

目录 1、产生疑惑 2、源码分析 2.1、pom.xml文件分析 2.2、启动类分析 3、总结 1、产生疑惑 当我们第一次使用Spring Boot练习的时候会觉得Spring Boot这么厉害&#xff0c;不管是依赖还是配置&#xff0c;它都为我们准备好了&#xff0c;我们只需要去编写业务代码就可…

[附源码]Python计算机毕业设计Django数字乡村基础治理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

调优四剑客的实战演练,福尔摩斯•K带你轻松优化性能

前言天下武功&#xff0c;唯快不破。在侦探的世界中&#xff0c;破案效率永远是衡量一名侦探能力的不二法门。作为推理界冉冉升起的新星&#xff0c;大侦探福尔摩斯K凭借着冷静的头脑、严谨的思维&#xff0c;为我们展现了一场场华丽而热血的推理盛宴。接下来&#xff0c;我们不…

【运维面试题】访问www.baidu.com背后发生了什么·dns解析过程·ping过程

文章目录 一、访问www.baidu.com背后发生了什么二、dns解析过程答法1(推荐)答法2三、ping过程一、访问www.baidu.com背后发生了什么 1.浏览器解析url是否合法 2.浏览器向DNS服务器请求解析ip地址 3.dns将解析出来的ip地址返回给浏览器 4.三次握手,浏览器与服务器进行tcp连接…

TVM 从入门到精通 | 安装 TVM (Part 2)

By 超神经内容一览&#xff1a;TVM 共有三种安装方法&#xff1a;从源码安装、使用 Docker 镜像安装和 NNPACK Contrib 安装。本文讲解如何通过 Docker 镜像 和 NNPACK Contrib 安装。关键词&#xff1a;TVM Docker 基础教程 欢迎回到 TVM 文档讲解 101&#xff0c;这个系…

【Python+Appium】开展自动化测试(十二)通过坐标定位元素

目录 前言 1&#xff0c;通过绝对坐标定位&#xff08;不推荐&#xff09; 2&#xff0c;通过相对坐标定位&#xff08;推荐&#xff09; 写在最后 前言 在使用appium做app自动化测试的过程中&#xff0c;可能会遇到元素的属性值不是唯一的情况&#xff0c;导致不能通过fin…

Linux上docker部署Mysql备份与恢复

Linux上Mysql备份与恢复 1.完全备份 完整备份是将所选的全部数据都备份起来&#xff0c;将备份文件生成一个镜像&#xff0c;再保存到其他的硬盘分区中。 1.1 完全备份一个或多个完整的库 ps: 博主mysql是用docker部署的&#xff0c;这时候需要进入docker容器进行操作。 d…

太极限了,JDK的这个BUG都能被我踩到!

之前遇到个文件监听变更的问题&#xff0c;刚好这周末有空研究了一番&#xff0c;整理出来分享给大家。 从一次故障说起 我们还是从故障说起&#xff0c;这样更加贴近实际&#xff0c;也能让大家更快速理解背景。 有一个下发配置的服务&#xff0c;这个配置服务的实现有点特…

详解设计模式:访问者模式

访问者模式&#xff08;Visitor Pattern&#xff09;&#xff0c;是在 GoF 23 种设计模式中定义了的行为型模式。据《大话设计模式》中说算是最复杂也是最难以理解的一种模式了。 访问者模式 是一种将数据操作与数据结构分离的设计模式&#xff0c;它可以算是 23 中设计模式中最…

NewStar CTF Week3Misc 4-5Web

目录 <1> Week-3 Misc (1) Whats HTTP (2) qsdzs girlfriend 3 (3) WebShell&#xff01; (4) 混沌的图像 <1> Week-4 Web (1) So Baby RCE(%0A进行rce rev|sort读取flag) (2) UnserializeThree(%0d换行rce) <2> week5-web (1) Give me your photo…

step-by-step 配置 gtest 在 vscode 测试 c/c++(Ubuntu 环境下示范)

1. 去把 gtest 装好 详见&#xff1a;CSND-PangCoder-[Ubuntu]GTest安装和测试-https://blog.csdn.net/qq_36251561/article/details/85319547 2. 在 VS Code 打上这几个插件 印象里打上 C TestMate 下面的就会自动装了…如果没有就手动装一下 3. 编写测试脚本 第一步那…

【Pytorch】第 1 章 :强化学习和 PyTorch 入门

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

Java并发常见面试题(三)

并发编程三大特性 原子性 一次操作或者多次操作&#xff0c;要么所有的操作都得到执行并且不受任何因素的干扰而中断&#xff0c;要么都不会执行。 在 Java 中&#xff0c;可以借助synchronized 、各种 Lock 以及各种原子类实现原子性。synchronized 和各种 Lock 可以保证任…

【吴恩达机器学习笔记】十三、异常检测

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为学习吴恩达机器学习视频的同学提供的随堂笔记。 &#x1f4da;专栏简介&#xff1a;在这个专栏&#xff0c;我将整理吴恩达机器学习视频的所有内容的笔记&…

[附源码]计算机毕业设计人事系统Springboot程序

项目运行 环境配置&#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…

Contest2850 - 【在线编程平台】2022年计算机类数据结构作业12.20221201-1206

问题 A: 二叉排序树 - 文本输出 题目描述 给定一个序列&#xff0c;使用该序列生成二叉排序树&#xff08;也叫二叉搜索树&#xff0c;BST&#xff09;&#xff0c;然后以本题规定方法输出该二叉排序树。 例&#xff1a; 给定一个序列&#xff1a;43 25 29 67 17 88 54 47 35…

用R语言制作交互式图表和地图

可以直接从R / RStudio制作在线交互式图表和地图。 去年&#xff0c;我们为一位客户进行了短暂的咨询工作&#xff0c;他正在构建一个主要基于在线交互式图表的分析应用程序。 配置 启动RStudio&#xff0c;创建一个新的RScript&#xff0c;然后将工作目录设置为下载的数据文…

git merge origin master和git merge master的区别(个人理解)

先说结论 git merge origin master 意思是当前的分支,进行合并,合并二个分支分别是远程分支master在本地的副本和本地分支的master git merge master 当前分支于本地所处的master分支进行合并 还有就是 git merge origin master是把origin merge 到 master 上的说法是错误的…

小侃设计模式(十五)-命令模式

1.概述 命令模式&#xff08;Command Pattern&#xff09;是将一个请求封装为一个对象&#xff0c;从而让你使用不同的请求把客户端参数化&#xff0c;对请求排队或者记录请求日志&#xff0c;可以提供命令的撤销和恢复功能。它是行为型模式的一种&#xff0c;能够有效降低系统…

【华为上机真题 2022】流水线

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…