Vue2生命周期

news2024/11/15 10:49:25

Vue2生命周期

  • 1、概念
  • 2、生命周期过程
    • 2.1 流程图示
    • 2.2 三阶段
  • 3、钩子函数详解
    • 3.1 beforeCreate() 创建前
    • 3.2 created()创建后
    • 3.3 beforeMount() 挂载前
    • 3.4 mounted()挂载完成
    • 3.5 beforeUpdate() 更新前
    • 3.6 updated() 更新后
    • 3.7 beforeDestroy() 销毁前
    • 3.8 destroyed() 销毁完成

1、概念

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数。生命周期钩子的 this 上下文指向调用它的 Vue 实例。

钩子函数是用于描述一个组件实例从引入到退出的全过程中的某个过程,整个过程成为生命周期。

也就是在如下代码中,new一个Vue实例的这几行代码,所执行的全过程。

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})

2、生命周期过程

2.1 流程图示

在这里插入图片描述

2.2 三阶段

组件的生命周期共分为三个阶段:挂载阶段、更新阶段、销毁阶段。

每个阶段对应的钩子函数分别为:

  1. 挂载阶段:beforeCreate、created、beforeMount、mounted
  2. 更新阶段:beforeUpdate、updated
  3. 销毁阶段:beforeDestroy、destroyed

即首次创建实例过程中,只执行四个生命周期钩子,beforeCreate、created、beforeMount、mounted,执行顺序与生命周期图一致,beforeUpdate与updated是在数据更新时候执行,而beforeDestroy与destroyed是在实例销毁的时候执行。

3、钩子函数详解

new (创建)一个Vue实例,会调用初始化 init 函数,初始化事件(如$once)和生命周期,注意此时数据代理并没有实现。此时,无法通过Vue实例来访问data中的数据、computed、watch、methods等中的方法。

3.1 beforeCreate() 创建前

beforeCreate() 创建前,指的是数据监测和数据代理创建之前。该钩子函数执行后,初始化数据,并通过Object.defineProperty()和给组件实例配置watcher观察者实例(发布-订阅者模式),实现数据监测与数据代理。

示例:

new Vue({
  el:"#app",
  render: h => h(App),
  data() {
    return {
      demo:"hello world!"
    }
  },
  beforeCreate(){
    console.log("****beforeCreate()执行阶段*****")
    console.log("demo 的值是:",this.demo)
    console.log("el 的值是:",this.$el)
  }
})

打印结果如下:证明此时,data中的数据与el还未初始化,无法通过Vue实例来访问data中的数据、computed、watch、methods等中的方法。
在这里插入图片描述

3.2 created()创建后

created()创建后,指的是数据监测和数据代理创建之后。该钩子函数执行后,实例创建完成,实例已完成以下配置:数据观测、属性和方法的运算,watch/event事件回调,完成了data 数据的初始化,可以访问data、computed、watch、methods上的方法和数据。但是,未挂载到DOM,不能访问到el属性,el属性,ref属性内容为空。

补充:ref属性介绍

  1. 被用来给元素或子组件注册引用信息(id的替代者)
  2. 应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc)
  3. 使用方式:
    1). 打标识:


    2). 获取:this.$refs.xxx

示例:

new Vue({
  el:"#app",
  render: h => h(App),
  data() {
    return {
      demo:"hello world!"
    }
  },
  beforeCreate(){
    console.log("****beforeCreate()执行阶段*****")
    console.log("demo 的值是:",this.demo)
    console.log("el 的值是:",this.$el)
  },
  created(){
    console.log("****created()执行阶段*****")
    console.log(this)
    console.log("demo 的值是:",this.demo)
    console.log("el 的值是:",this.$el);
    debugger;
  }
})

打印结果如下:证明此时,data 数据的初始化完成,数据监测和数据代理创建,el目前不可见。
在这里插入图片描述
这个钩子函数比较重要,在这个时候,可以调用methods中的方法,改变data中的数据且变化可以响应在页面上,获取computed中的计算属性等等,也可以在这里发ajax请求等。

3.3 beforeMount() 挂载前

beforeMount() 执行时,页面呈现的是未经Vue编译的DOM结构,所有对DOM的操作,最终都不奏效。

3.4 mounted()挂载完成

此时,页面上呈现的是经过Vue编译的DOM;对DOM的操作均有效(但是要尽量避免操作DOM)。

至此,初始化阶段全部完成。一般在此执行:开启定时器,发送网络请求,订阅消息,绑定自定义事件等初始化操作。

3.5 beforeUpdate() 更新前

当数据发生变化,执行beforeUpdate()钩子函数,此时,内存中数据是新的,但是页面是旧的,也就是,在这个钩子函数中,页面和数据不同步。

示例:

new Vue({
 el: "#app",
  // render: h => h(App),
  data () {
    return {
      n: 1
    }
  },

  methods: {
    updateN () {
      this.n += 1
    }
  },
  beforeUpdate () {
    console.log("****beforeUpdate()执行阶段*****")
    console.log("n的值为", this.n)
    debugger
  },

})

代码的执行结果如下:

在这里插入图片描述

3.6 updated() 更新后

此时:内存中数据是新的,但是页面是新的,也就是,在这个钩子函数中,页面和数据保持同步。

示例:

new Vue({
  el: "#app",
  // render: h => h(App),
  data () {
    return {
      n: 1
    }
  },

  methods: {
    updateN () {
      this.n += 1
    }
  },
  beforeUpdate () {
    console.log("****beforeUpdate()执行阶段*****")
    console.log("n的值为", this.n)
  },
  updated () {
    console.log("****updated()执行阶段*****")
    console.log("n的值为", this.n)
    debugger
  }

})

代码的执行结果如下:

在这里插入图片描述

3.7 beforeDestroy() 销毁前

在销毁前,实例中所有的data、methods、computed、指令等,都处于可用状态在此阶段,一般进行:关闭定时器、取消订阅消息解绑自定义事件等收尾工作。

接下来的环节,移除监视、所有的子组件、(自定义)事件的监听器。

3.8 destroyed() 销毁完成

销毁完成后,执行destroyed。该实例的生命周期结束。

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

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

相关文章

在群晖上安装运行Airflow

本文是应网友 : 要求折腾的; 什么是 Airflow ? Apache Airflow 是一个开源平台,用于开发、调度和监控面向批处理的工作流。Airflow 的可扩展 Python 框架使您能够构建与几乎任何技术连接的工作流。Web 界面有助于管理工作流程的状…

RabbitMQ灵活运用,怎么理解五种消息模型

RabbitMQ灵活运用,怎么理解五种消息模型 简介一、AMQP协议二、交换机类型与默认交换机1. 交换机的四种类型2. 默认交换机 三、五种模式速览1. 一对一简单模式2. work模式(轮询)3. 发布/订阅模式4. 路由模式(自称direct模式&#x…

Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能

一.背景 由于最近的项目需要开启无障碍功能然后实现对应的功能需求,但是由于需求是需要安装后就开启辅助功能,不要在繁琐的在设置中开启辅助功能,所以需要如何在应用中开启辅助功能。 二.前提条件 将普通应用转换成系统应用,然后将系统的framework.jar包放到应用中并且可以…

vscode配置task.json和launch.json启动调试

首先说一下参考博文: 文章标题“VScode 调试教程 tasks.json和launch.json的设置(超详细)” 地址:https://blog.csdn.net/qq_59084325/article/details/125662393 官方文档太官方,其他人的文档也看过,单独…

微信小程序浏览docx,pdf等文件在线预览使用wx.openDocument

wx.downloadFile({ url: fileUrl,//pdf链接success(res) {wx.openDocument({ //打开文档filePath: res.tempFilePath,fileType: "pdf",//文档类型showMenu: true,success: function (res) {wx.showToast({title: 打开文档成功,})},fail: function (res) {wx.showToas…

Stable Diffusion使用“面部修复”时报TypeError: ‘NoneType‘ object is not subscriptable错

问题 Stable Diffusion使用“面部修复”时报TypeError: ‘NoneType’ object is not subscriptable错 解决方案 下载【detection_Resnet50_Final.pth】和【parsing_parsenet.pth】到【repositories\CodeFormer\weights\facelib】目录下,并重新运行项目即可。 ht…

Unity 基础之 URP 项目创建\项目转URP Pipline

Unity 基础之 URP 项目创建\项目转URP Pipline 目录 Unity 基础之 URP 项目创建\项目转URP Pipline 一、简单介绍 二、创建 URP 项目 三、工程项目转 URP 一、简单介绍 Unity中的一些基础知识点,方便日后查阅。 Unity游戏开发中,这里简单介绍如何创…

Methodot低代码开发教程——玩转表格增删改查分页

目录 1、背景介绍 2、连接数据源 2.1 新增数据源 2.2 填写数据源信息 3、表格数据的展示 3.1 新增查询,编写查询语句 3.2 使用表格组件 3.3 同步数据源与表格列名 4、表格的数据新增 4.1 新增查询,编写新增语句 4.2 表格配置新增一行&#xff0…

华为云专家出品《从零到一•Python图像处理入门》电子书

《华为云云享.书库》系列电子书来啦! 本系列电子书旨在帮助开发者成长,汇聚华为云内外部专家技术精华制作而成。 本书《从零到一•Python图像处理》是该系列电子书第3部。 我们在华为开发者即将到来之际,开放电子书免费下载。 点击下方链接…

JVM探究

JVM探究 请谈谈你对JVM的理解?java8虚拟机和之前的变化、更新?什么是OOM,栈溢出StackOverFlowError?怎么分析?JVM的常用调优参数有哪些?内存快照如何 抓取,怎么分析Dump文件?知道吗…

Unity VR开发教程 OpenXR+XR Interaction Toolkit(八)手指触控 Poke Interaction

文章目录 📕教程说明📕XR Poke Interactor📕与 UI 进行触控交互⭐添加 Tracked Device Graphic Raycaster 和 XR UI Input Module 让 UI 可被交互 📕与物体进行交互⭐XR Simple Interactable⭐XR Poke Filter 往期回顾&#xff1a…

【Linux进程】进程的基本概念 {PCB结构体,进程表,Linux中的task_struct,查看进程,获取进程PID,使用fork创建子进程}

一、进程的基本概念 1.1 什么是进程? 进程是计算机中正在运行的程序的实例。它是操作系统进行资源分配和调度的基本单位。每个进程都有自己的内存空间、代码、数据和执行状态。进程可以独立运行,相互之间不会干扰。操作系统可以同时运行多个进程&#…

vue表格实现一个简单的合并单元格功能

用的是vue2ant-design-vue 但是vue3或者element-ui也是同理 先上效果 需要后端的数据将相同id的放在一起 否则也会有问题 例如: this.list [{id: 1,name: 舟山接收站,...}{id: 2,name: 舟山接收站碳中和LNG,...},{id: 2,name: 舟山接收站碳中和LNG,...} ]// th…

Redis7【⑤ Redis 发布 订阅】

Redis发布和订阅 本章了解即可,命令可以不用敲。 Redis 发布和订阅(Publish/Subscribe,简称 Pub/Sub)是一种消息传递模式,用于在 Redis 中实现消息的发布和订阅。 在 Redis 中,发布者(Publi…

maven打包所有依赖,对外提供sdk.jar

maven打包所有依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compile.source>1.8</maven.compile.source><maven.compile.target>1.8</maven.compile.target></properties><…

Swin Transformer训练报错问题

1. 训练遇到报错问题 &#xff08;1&#xff09;mportError: cannot import name _pil_interp from timm.data.transforms 原因&#xff1a; timm.data.transforms里面没有_pil_interp&#xff0c;只有str_to_pil_interp、_str_to_pil_interpolation、_pil_interpolation_to_s…

rancher 节点重启无感发布

这里设置 时间 为120s &#xff0c;保证 新节点起来后&#xff0c;和 老节点并行2分钟后再剔除&#xff0c;老节点

el-select修改样式

目录 准备 修改placeholder颜色 修改右侧箭头 修改圆角边框 准备 <el-select v-model"goodsId" clearable placeholder"请选择" :popper-append-to-body"false"><el-option v-for"item in kindList" :key"item.value…

浙江宇视科技 网络视频录像机 ISC LogReport.php 远程命令执行漏洞

免责声明 文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得危害网络安全&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机…

Vue Router activated deactivated 路由守卫

6.12.activated deactivated activated和deactivated是路由组件所独有的两个钩子&#xff0c;用于捕获路由组件的激活状态具体使用 activated路由组件被激活时触发deactivated路由组件失活时触发 src/pages/News.vue <template><ul><li :style"{opacity}…