Vue的生命周期(简单的过程)

简介: Vue的生命周期(简单的过程)

有些同学在网上搜索,全是官方文档的生命周期流程图,看完总时似懂非懂,有的叙述模糊,有的不完整,甚至时有的无法理解。

这一次,我根据个人的了解,手动实现一个生命周期的画图,算是基本摸懂了Vue的生命周期过程

vue生命周期生成到编译环境的选项 如下图:

image.png

在将生命周期前,我们先知道,生命周期的钩子函数是什么?

那就是在整个生命周期中,主动执行的函数,称为钩子函数

1.在new Vue实例化后会自动执行初始化函数,会初始化事件,生成vue实例的整个生命周期,这个时候就有整个生命周期

2.执行初始化前beforeCreate 这个生命周期的钩子函数无法进行如何的操作,在当前阶段data、methods、computed以及watch上的数据和方法都不能被访问。可以理解为只是走一个流程

3.进入到初始化中,这个时候会初始化data和props,并且给数据绑定上对象劫持(vue的核心)不知道对象劫持的同学可以去搜索一下,必须先弄懂这个东西

4.初始化结束created 这个时候,我们可以通过它获取到data数据了,并且可以得到一个“假”的HTML,但不会在页面展示,当前阶段已经完成了数据观测,也就是可以使用数据,更改数据,在这里更改数据不会触发updated函数。可以做一些初始数据的获取,在当前阶段无法与Dom进行交互,如果非要想,可以通过vm.$nextTick来访问Dom

5.来到编译环境的选项,是否有eltemplate,根据编译选项作为模板并且将数据和compile函数(编译函数)进行结合,创建出虚拟DOM,对象。

从生命周期的生成到编译环境的选项,我们基本了解完了上半部分

接下来,我们了解数据如何在页面的流程,下半部分的内容,如下图:

image.png

在编译环境到生成虚拟DOM后,就会来到数据挂载的生命周期钩子函数。

6.数据挂载前 beforeMount 在这个钩子函数中,我们可以获取到数据,也就是响应式数据发生更新,虚拟dom重新渲染之前被触发,你可以在当前阶段进行更改数据,不会造成重渲染。

7.挂载中,会生成 $el(自行查解),并且替换掉原有的编译模板,生成一个真正可用的HTML

8.数据挂载后 mounted 将HTML显示到页面,在当前阶段,真实的Dom挂载完毕,数据完成双向绑定,可以访问到Dom节点,使用$refs属性对Dom进行操作。

在mounted下,会有2个生命周期钩子函数,那就是数据更新阶段的钩子函数

9.beforeUpdate 页面数据更新之前,监听数据的改变,并且可以获取到最新的数据,但是不会更新页面的数据

10.更新中 将最新的数据重新渲染更新DOM,并且执行compile 和打补丁(只改变数据影响的内容,其他不会改变)

11.updated数据更新完毕 在这个生命周期钩子函数中 我们可以获取到当前最新的数据(也就是页面中的最新数据)当前阶段组件Dom已完成更新。要注意的是避免在此期间更改数据,因为这可能会导致无限循环的更新

销毁阶段的生命周期钩子函数

1.在触发 $destroy( ) 函数后,就会触发销毁阶段

2.beforeDestroy 销毁之前 还是可以使用HTML的,在当前阶段实例完全可以被使用,我们可以在这时进行善后收尾工作,比如清除计时器,销毁父组件对子组件的重复监听。beforeDestroy(){Bus.$off("saveTheme")}

3.销毁中 终止对象劫持(最主要)子组件,事件

4.destroyed 销毁之后 组件已被拆解,数据绑定被卸除,监听被移出,子实例也统统被销毁。

vue的整个生命周期过程执行完毕,我们会发现两个问题?

第一个问题 除了beforeCreated无法获取到数据之外,其他钩子函数都可以获取到数据

而仅仅只有 beforeUpdateupdated获取到的是最新的数据

第二个问题 beforeUpdateupdated 会在数据不断发生改变时重复触发(从而实现数据影响视图)

目录
相关文章
|
3月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
321 2
|
2月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
300 137
|
6月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
807 0
|
6月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
5月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
430 1
|
5月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
269 0
|
6月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
481 17
|
6月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
286 1
|
6月前
|
存储 JavaScript 前端开发
如何高效实现 vue 文件批量下载及相关操作技巧
在Vue项目中,实现文件批量下载是常见需求。例如文档管理系统或图片库应用中,用户可能需要一次性下载多个文件。本文介绍了三种技术方案:1) 使用`file-saver`和`jszip`插件在前端打包文件为ZIP并下载;2) 借助后端接口完成文件压缩与传输;3) 使用`StreamSaver`解决大文件下载问题。同时,通过在线教育平台的实例详细说明了前后端的具体实现步骤,帮助开发者根据项目需求选择合适方案。
534 0
|
6月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
270 0