详解vue生命周期

vue2 生命周期

Vue.js是一个流行的JavaScript框架,它使用了一套生命周期钩子函数来管理组件的创建、更新和销毁过程。以下是Vue组件的生命周期钩子函数:

  1. beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。此时组件的选项和数据尚未初始化。

  2. created:在实例已经创建完成之后被调用。这个阶段完成了数据观测 (data observer),属性和方法的运算,watch/event 事件回调等配置。

  3. beforeMount:在挂载开始之前被调用。相关的render函数首次被调用。

  4. mounted:在挂载完成后被调用。对于需要访问DOM元素的操作或者初始化第三方库的逻辑,常常会在这里进行。

  5. beforeUpdate:在响应式数据更新之前被调用,发生在虚拟DOM重新渲染和打补丁之前。可以在此处进行更改数据的操作,但是避免引起无限循环的更新。

  6. updated:在虚拟DOM重新渲染和打补丁之后被调用。组件已经更新完成,可以执行其他操作。

  7. beforeUnmount(Vue 3中称为beforeUnmount):在实例销毁之前被调用。在这里清理定时器、解绑自定义事件或其他副作用操作。

  8. unmounted(Vue 3中称为unmounted):在实例销毁后被调用。这个阶段组件已经完全销毁,所有的事件监听器和DOM元素都已被删除。

以上是Vue组件的常见生命周期钩子函数。可以根据需要使用这些钩子函数来管理组件的不同阶段的行为。请注意,在Vue 3中,生命周期钩子函数的名称发生了一些变化,但其功能大致相同。

更多详细内容,请微信搜索“前端爱好者戳我 查看

详解

init
  • initLifecycle/Event ,往vm上挂载各种属性
  • callHook: beforeCreated : 实例刚创建
  • initInjection/initState : 初始化注⼊和 data 响应性
  • created: 创建完成,属性已经绑定,但还未生成真实 dom
  • 进行元素的挂载: $el / vm.$mount()
  • 是否有 template : 解析成 render function
    • *.vue 文件: vue-loader 会将 <template> 编译成 render function
  • beforeMount : 模板编译/挂载之前
  • 执行 render function ,生成真实的 dom , 并替换到 dom tree 中
  • mounted : 组件已挂载
update
  • 执行 diff 算法, 比对改变是否需要触发 UI 更新
  • flushScheduleQueue
  • watcher.before : 触发 beforeUpdate 钩子 - watcher.run() : 执行 watcher 中的
    notify , 通知所有依赖项更新UI
  • 触发 updated 钩子: 组件已更新
  • actived / deactivated(keep-alive) : 不销毁, 缓存, 组件激活与失活
destroy
  • beforeDestroy : 销毁开始
  • 销毁自身且递归销毁子组件以及事件监听
    • remove() : 删除节点
    • watcher.teardown() : 清空依赖
    • vm.$off() : 解绑监听
      destroyed : 完成后触发钩子

上面是vue的声明周期的简单梳理,接下来我们直接以代码的形式来完成vue的初始化

new Vue({})
// 初始化Vue实例
function _init() {// 挂载属性initLifeCycle(vm)// 初始化事件系统,钩子函数等initEvent(vm)// 编译slot、vnodeinitRender(vm)// 触发钩子callHook(vm, 'beforeCreate')// 添加inject功能initInjection(vm)// 完成数据响应性 props/data/watch/computed/methodsinitState(vm)// 添加 provide 功能initProvide(vm)// 触发钩子callHook(vm, 'created')// 挂载节点if (vm.$options.el) {vm.$mount(vm.$options.el)}
} // 挂载节点实现
function mountComponent(vm) {// 获取 render functionif ( !this.options.render) {// template to render// Vue.compile = compileToFunctionslet { render } = compileToFunctions()this.options.render = render
}// 触发钩子
callHook( 'beforeMounte')// 初始化观察者// render 渲染 vdom,vdom = vm.render()// update: 根据 diff 出的 patchs 挂载成真实的 domvm._update(vdom)// 触发钩子callHook(vm, 'mounted')
}// 更新节点实现
funtion queueWatcher(watcher) {nextTick(flushScheduleQueue)
}// 清空队列
function flushScheduleQueue() {// 遍历队列中所有修改for(){// beforeUpdatewatcher.before()// 依赖局部更新节点watcher.update()callHook( 'updated')}
}// 销毁实例实现
Vue.prototype.$destory = function() {// 触发钩子callHook(vm, 'beforeDestory')// 自身及子节点remove()// 删除依赖watcher.teardown()// 删除监听vm.$off()// 触发钩子callHook(vm, 'destoryed')
}

扩展 : Vue3中的生命周期

Vue3中的生命周期包含以下四个阶段和对应的钩子函数:

  1. 组件创建阶段

    • setup():在此阶段开始创建组件,发生在beforeCreatecreated钩子函数之前。这个钩子函数主要用来创建组件的datamethod
  2. 组件挂载阶段

    • onBeforeMount():在组件挂载到节点上之前执行的函数。
    • onMounted():组件挂载完成后执行的函数。
  3. 数据更新阶段

    • onBeforeUpdate():在组件更新之前执行的函数。
    • onUpdated():在组件更新完成之后执行的函数。
  4. 组件销毁阶段

    • onBeforeUnmount():在组件卸载之前执行的函数。
    • onUnmounted():在组件卸载完成后执行的函数。

此外,如果一个Vue3组件被包含在 <keep-alive> 中,它会有两个额外的生命周期钩子函数:

  • onActivated():当被包含的组件被激活时执行。
  • onDeactivated():当从A组件切换到B组件,A组件消失时执行。

以上就是Vue3组件的生命周期及其各阶段的钩子函数。利用好这些钩子函数,可以在适当的时机执行特定的操作,如数据初始化、节点操作、UI更新等。

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

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

相关文章

字节跳动ZNS SSD应用案例解析

一、ZNS SSD基本原理 ZNS SSD的原理是把namespace空间划分多个zone空间&#xff0c;zone空间内部执行顺序写。这样做的优势&#xff1a; 降低SSD内部的写放大&#xff0c;提升SSD的寿命 降低OP空间&#xff0c;host可以获得更大的使用空间 降低SSD内部DRAM的容量&#xff0c;…

一款可无限扩展的软件定时器开源框架项目代码

摘自链接 时间片轮询架构如何稳定高效实现&#xff0c;取代传统的标志位判断方式&#xff0c;更优雅更方便地管理程序的时间触发操作。 可以在STM32单片机上运行。

基于SSM的社区管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

LeetCode(52)最小栈【栈】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 最小栈 1.题目 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void…

区分工业设计软件中CAD、CAE、CAM、PDM等概念

工业设计软件是专门用于辅助工业设计师在产品设计和开发过程中进行各种任务的计算机程序。这些软件提供了广泛的工具和功能&#xff0c;帮助设计师创建、分析、修改和可视化产品的概念和详细设计。 CAD 计算机辅助设计&#xff08;Computer-Aided Design&#xff0c;CAD&…

15、SQL注入——Sqlmap

文章目录 一、Sqlmap简介1.1 sqlmap可以对URL干嘛&#xff1f;1.2 Sqlmap支持的注入技术1.3 SQLmap检测注入漏洞的流程1.4 Sqlmap的误报检测机制 二、sqlmap基本使用 一、Sqlmap简介 sqlmap使用教程 1.1 sqlmap可以对URL干嘛&#xff1f; 判断可注入的参数判断可以使用哪一种…

汽车电子智能保险丝解决方案

一、背景知识 在过去的几十年里&#xff0c;电子在汽车系统创新中发挥了关键作用。新型半导体器件具有新颖的功能&#xff0c;增强了车辆机械系统提供的功能。 虽然半导体解决方案和电子产品将继续在汽车电子产品中发挥关键作用&#xff0c;但展望未来&#xff0c;汽车创新将…

css顺时针旋转90°再3D中绕Y轴旋转180°

CSS 顺时针旋转 90 再 3D 中绕 Y 轴旋转 180 的示例代码如下&#xff1a; div {transform: rotate(90deg) perspective(500px) rotateY(180deg); }在这个示例中&#xff0c;元素被先进行了 2D 顺时针旋转 90&#xff0c;然后设置了 perspective 属性来定义元素的视角距离&…

UE4 材质实现Glitch效果

材质实现Glitch效果 UE4 材质实现Glitch效果预览1预览2 UE4 材质实现Glitch效果 预览1 添加材质函数&#xff1a; MF_RandomNoise 添加材质&#xff1a; 预览2 添加材质函数MF_CustomPanner&#xff1a; 添加材质函数&#xff1a;MF_Glitch 材质添加&#xff1a; 下面用…

Docker 部署 2FAuth 服务

拉取最新版本的 2FAuth 镜像&#xff1a; $ sudo docker pull 2fauth/2fauth:latest在本地预先创建好 2fauth 目录, 用于映射 2FAuth 容器内的 /2fauth 目录。 使用以下命令, 在 前台 运行 2FAuth 容器: $ sudo docker run -it --rm --name 2fauth -p 10085:8000/tcp -v /ho…

3D材质编辑:制作被火烧的木头

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

css实现头部占一定高度,内容区占剩余高度可滚动

上下布局&#xff1a; <div class"container"><header class"header">头部内容</header><div class"content">内容区域</div> </div>.container {display: flex;flex-direction: column;height: 100vh; /*…

SQL Server 2017数据库window server服务器改名操作

在window服务器修改机器名重新加域后&#xff0c;需要执行下面的SQL语句修改数据库里面记录的机器名字&#xff0c;才能在修改后通过新名字连接数据库。 if serverproperty(servername) <> servername begin declare server sysname set server ser…

53. Protocol buffer 的Go使用

文章目录 一、介绍二、安装三、protoc3语法1、 protoc3 与 protoc2区别2、proto3生成go代码包Message内嵌Message字段单一标量字段单一message字段可重复字段slicemap字段枚举 一、介绍 Protobuf是Google旗下的一款平台无关&#xff0c;语言无关&#xff0c;可扩展的序列化结构…

AWS KeyPair密钥格式转换PPK<>PEM

概述说明 PEM&#xff08;Privacy Enhanced Mail&#xff09;和PPK&#xff08;Putty Private Key&#xff09;都是与加密和安全相关的文件格式&#xff0c;通常用于存储私钥信息。它们在不同的上下文中使用&#xff0c;并且与不同的软件和协议相关联。 PEM&#xff08;Priva…

【kubernetes】k3s集群搭建(正在更新……)

文章目录 一、k3s简介二、快速搭建1.控制平面2.镜像加速 Pod容器集1.创建和管理pod Deployment(部署)与ReplicaSet(副本集)滚动更新 Service命名空间YAML语法管理对象常用命令缩写YAML规范 声明式配置对象标签选择器 容器运行时接口(CRI)与镜像导入导出容器运行时接口(CRI) 金丝…

基于POSIX标准的Linux进程间通信

文章目录 1 管道&#xff08;匿名管道&#xff09;1.1 管道抽象1.2 接口——pipe1.3 管道的特征1.4 管道的四种情况1.5 匿名管道用例 2 命名管道2.1 创建一个命名管道——mkfifo2.2 关闭一个管道文件——unlink2.3 管道和命名管道的补充2.4 命名管道用例 3 共享内存3.1 原理3.2…

案例二:SQL Server数据库的备份和还原

1、备份类型。 在 SQL Server 中提供了三种常用的备份类型&#xff0c;分别是完整备份&#xff0e;差异备份和事务日志备份。 完整备份&#xff1a; 完整备份包括对整个数据库、部分事务日志、数据库结构和文件结构的备份。完整备份代表的是备份完成时刻的数据库。 完整备份是…

【Hydro】Python绘制降雨径流双Y轴成果图

目录 说明源代码说明 双y轴图像具有单y轴图像没有的对比效果,通常会用来绘制降雨径流成果图,在MATLAB中有plotyy函数可以实现,Python的实现方式没有MATLAB那样方便,不过实现效果却也不见得差。 Python中的matplotlib通常使用twinx来生成双Y轴,下图便是使用matplotlib绘制…