【Vue2从入门到精通】五分钟带你摸透Vue生命周期

简介: 还在为vue生命周期太多不知道怎么用吗?5分钟带你摸透vue生命周期。什么是Vue生命周期?Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载、销毁等⼀系列过程。

yyx.jpeg

什么是Vue生命周期

Vue的生命周期就是vue实例从创建到销毁的全过程,也就是new Vue() 开始就是vue生命周期的开始。

Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载、销毁等⼀系列过程。

钩子函数是Vue生命周期中每个阶段对外开放让程序员操作Vue的接口。Vue有8个钩子函数。

Vue生命周期图解

下图是Vue官方的生命周期图:
v.png

Vue有8个生命周期钩子函数

由上图可见Vue有8个生命周期

1. beforeCreate( 创建前,一般不用管 )

在这个阶段会初始化一些东西,例如:初始化data中的数据、methods中的方法、计算属性computed,以及this的指向等。

它是在实例初始化之后,数据观测和事件配置之前被调用.

此时组件的选项对象还未创建,el 和 data 并未初始化,因此无法访问methods, data, computed等上的方法和数据。

在这个生命周期可以做什么?

1. 可以做页面拦截

当进一个路由的时候我们可以判断是否有权限进去,是否安全进去,携带参数是否完整,参数是否安全。使用这个钩子好函数的时候就避免了让页面去判断,省掉了创建一个组建Vue实例。

2.可以做自定义重定向

当路由还没有进去时我们判断是否正确进去,若不正确进去可以重定向到指定的页面。

这些都可以在vue路由层进行拦截和重定向。

所以,这个生命周期基本不用管。

// 初始化之前
beforeCreate() {
   
    console.log(this.messasge, "初始化数据阶段");
},

2. created ( 创建后 )

实例已经创建完成之后被调用。

在这一步,实例已完成以下配置:数据观测、属性和方法的运算,watch/event事件回调,完成了data 数据的初始化。你可以调用methods中的方法,改变data中的数据,获取computed中的计算属性等。通常我们可以在这里对实例进行预处理,也有一些童鞋喜欢在这里发ajax请求。

挂在阶段还没有开始, $el属性目前不可见,不可操作 DOM 节点。

// 初始化完毕
created() {
   
    console.log("初始化好了");
},

3. beforeMount ( 挂载前)

挂载开始之前被调用,相关的render函数首次被调用(虚拟DOM),实例已完成以下的配置: 编译模板,把data里面的数据和模板生成html,完成了el和data 初始化。

注意:此时还没有挂载html到页面上,不可操作 DOM 节点。

// 挂载前,对数据的最后一次进行更改,编译完毕,马上将要挂载
beforeMount() {
   
    console.log("编译完毕,将要进行挂载");
    console.log("还没有进行挂载,获取不了");
}

4. mounted ( 挂载后,经常使用)

挂载完成,也就是模板中的HTML渲染到HTML页面中,mounted只会执行一次。

// 编译完毕,将要去实现挂载
mounted() {
   
    console.log("能够获取到真实的DOM");
}

在这个生命周期可以做什么?

此时一般可以做一些ajax操作,操作 DOM 节点等。

5. beforeUpdate(更新前)

在数据更新之前被调用,发生在虚拟DOM重新渲染和打补丁之前,可以在该钩子中进一步地更改状态,不会触发附加地重渲染过程。

beforeUpdate() {
   
    // 当data里面的数据发生更新的时候,产生一份虚拟节点他,通过diff算法完成最大化的渲染,
    console.log("通过diff算法比对准备更新,数据还是之前的");  
}

6. updated(更新后)

在由于数据更改导致地虚拟DOM重新渲染和打补丁只会调用,调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作,然后在大多是情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环,该钩子在服务器端渲染期间不被调用。

updated() {
   
    //data里面的数据和页面中此时是最新的了。
    console.log("更新完的");
}

7. beforeDestrioy(销毁前,有清除需要时使用)

在实例销毁之前调用,实例仍然完全可用。

在这个生命周期,还可以用this来获取实例。

在这个生命周期可以做什么?

一般在这一步做一些重置的操作,比如清除掉组件中的定时器和监听的dom事件等。

beforeDestroy () {
   
    //为组件的销毁前做一些准备
    console.log("销毁前最后的挣扎")
    // 清除定时器
    clearInterval(this.timer);
    this.timer = null;
    // 移除监听事件
    window.removeEventListener('scroll', this.handleScroll)
}

8. destroyed(销毁后,一般不用管)

在实例销毁之后调用,调用后,所有的事件监听器会被移出,所有的子实例也会被销毁,该钩子在服务器端渲染期间不被调用。

destroyed() {
   
    // 组件已经完全销毁
    console.log("组件得到销毁");
}

✍创作不易,求关注😄,点赞👍,收藏⭐️

相关文章
|
4天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
vue学习第四章
|
4天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
vue学习第九章(v-model)
|
4天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
vue学习第十章(组件开发)
|
9天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
10天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
10天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
10天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
10天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
11天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
9天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
下一篇
无影云桌面