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 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
4天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
4天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
4天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
3天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
5天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
3天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
5天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
10天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发
|
10天前
|
存储 JavaScript
Vue 状态管理工具vuex
Vue 状态管理工具vuex