VUE生命周期详解

第一章 VUE 生命周期

提示:学会VUE生命周期,就能够得心应手的控制你的页面!简直不要太棒了!!



前言

本章节主要讲述VUE生命周期的整个历程,这很重要,只有了解了整个生命周期,在写代码的时候才会清楚的知道什么时候该触发什么事件,逻辑才会更加的清晰。


一、什么是VUE的生命周期?

vue实例创建到销毁的整个过程就是vue的生命周期。vue的所有功能的实现都是围绕它的整个生命周期进行的,在生命周期内的不同阶段调用对应的钩子函数,进而实现组件数据管理和DOM渲染两大重要功能

二、生命周期钩子函数

生命周期函数钩子如下:

  • beforeCreate
  • created
  • beforeMount
  • monuted
  • beforeUpdate
  • updated
  • beforeDestroy
  • destroyed
这些生命周期钩子函数,会在下面的生命周期历程中详细说明它的使用场景

三、生命周期历程

  • 从vue实例创建开始生命周期就诞生了,从创建到消亡整个生命周期历程中,它会依次经历以下几件人生大事:
  1. 实例对象创建
  2. 实例初始化
  3. 模板编译
  4. 虚拟DOM挂载
  5. 监听数据改变
  6. 销毁
  • 生命周期走到每个阶段的每个节点时,会对应的调用执行生命周期的钩子函数,调用执行完毕后,继续进行下一个生命阶段,直至最终销毁,整个生命周期也就结束了

  • 生命周期历程总的大致分为三个阶段:创建阶段、运行阶段、销毁阶段。下面对各阶段进行详细说明
    (下面的说明,从头到脚依次仔细读,我相信vue的生命周期就能够很好的理解了!!)

1.创建阶段

当我们new一个vue实例对象时,就立马进入了创建阶段,之后会立即初步初始化该实例对象(注意此次初始化完成后,该实例对象仅仅只是拥有了一些默认的生命周期钩子函数和默认的事件,data和methods都还没有被初始化) 代码如下(示例):
<!-- DOM -->
<div id="app">
    <h2 id="h2">{{msg}}</h2>
    <button @click="msg='no'">修改data</button>
</div>
//vue实例对象
var vm = new Vue({
	el: 'app',
	data () {
		return {
			msg: 'ok'
		}
	},
	methods: {
		show () {
			console.log('执行了show方法')
		}
	},
	beforeCreate() {},
	Created() {},
	beforeMount() {},
	monuted() {},
	beforeUpdate() {},
	update() {},
	beforeDestory() {},
	destroyed() {}
})
在此节点,完成vue实例对象初步初始化后,会进入到生命周期的第一个钩子函数beforeCreate,此时可以在这个函数钩子里面实现自己的一些合理的代码逻辑处理 代码如下(示例):
beforeCreate () {
    // 这是我们遇到的一个生命周期函数,表示实例完全被创建出来之前,会执行此函数钩子
    console.log(this.msg) // 控制台输出:undefine        !!!!!并不会输出ok
    this.show() // 控制台会报错,this.show is not a function
    // 注意!!!在beforeCreate生命周期函数执行的时候,data和methods中的数据都还没有被初始化!!!
}
执行完成钩子函数beforeCreate,会去初始化数据和方法(即初始化data和methods),data和methods全部初始化完成过后,执行下一个生命周期函数created 代码如下(示例):
created () {
    // 这是我们遇到的第二个生命周期函数,此时data和methods都已经被初始化好了!!!
    console.log(this.msg) // 控制台输出:ok
    this.show() // 控制台输出:执行了show方法
    // 注意!!!!!:如果要调用methods中的方法,或者操作data中的数据
    // 这是最早能拿到实例里面的数据和方法的一个钩子函数
  }
执行完成钩子函数created后,下一步就是进行模板的编译了,判断有无el、template属性,进而执行对应的vue代码指令,形成模板字符串,之后将模板字符串渲染为内存中的虚拟DOM树,保留在内存中,下一步则是去执行下一个生命周期钩子函数beforeMount(注意:此节点只是完成了在内存中渲染虚拟DOM树,并未真正的把模板挂载到页面中) 代码如下(示例):
beforeMount () {
    //这是我们遇到的第三个生命周期函数,表示模板在内存中已经编辑完成了,但是尚未把模板挂载渲染到页面中
    console.log(document.getElementById('h2').innerText) // 控制台输出:{{msg}}
    // (innerText为DOM中标签为<h2 id="h2">{{msg}}</h2>的内容{{msg}})
    // beforeMount执行的时候,DOM元素没有被真正替换,输出还是之前的模板字符串{{msg}},不是msg初值ok
}
执行完成钩子函数beforeMount后,接下来就是将内存中编译好的虚拟DOM挂载渲染到真实页面上去,挂载完成后,会执行下一个钩子函数mounted 代码如下(示例):
mounted () {
    // 这是遇到的第四个生命周期函数
    // 此时内存中的模板已经真实的挂载到了页面中,用户已经能够看到渲染好的页面了
    // 所以要通过某些插件操作页面上的DOM节点,最早就在这里执行
    console.log(document.getElementById('h2').innerText) // 控制台输出:ok
    // 注意!!!!!!:mounted是实例创建期间的最后一个生命周期函数
    // 执行完了mounted函数,标志vue实例创建完毕,组件脱离创建阶段,接下来就进入运行阶段
}

执行完成钩子函数mounted后,则标志着vue实例对象创建阶段完毕了

2.运行阶段

当我们页面有数据修改时,则会立即进入运行阶段,此阶段一共有两个生命周期函数beforeUpdate和updated,这两个函数会根据data数据的改变,有选择性的触发0次到多次 现在我们假设点击了DOM中的button按钮,将数据msg修改为了no,这时则处于生命周期的运行阶段了,data中的msg已经完成了从ok变为no的修改(此时数据是最新的,但是真实页面不是最新的,它并未更新),之后会进入下一个生命周期函数beforeUpdate

代码如下(示例):

beforeUpdate () {
    // 这是我们遇到的第五个生命周期函数
    // 此时界面还没有被刷新【但是数据肯定被更新了】
    console.log('界面上的元素内容:' + document.getElementById('h2').innerText) // 控制台输出:ok
    console.log('data中的msg数据:' + this.msg) // 控制台输出:no
    // 结论:执行beforeUpdate,此时页面中显示的数据未与新data保持同步,页面未刷新
}
beforeCreate执行完成过后,会根据data中的最新数据,首先会在内存中更新虚拟DOM树,当最新的虚拟DOM树被更新完成后,则重新将内存中已经更新好的虚拟DOM树渲染到真实页面中去,真实页面重新渲染完毕后立即进入下一个生命周期函数updated,此时页面和data保持同步,都是最新的

代码如下(示例):

updated () {
    // 这是我们遇到的第六个生命周期函数
    // 在执行updated函数时,页面和data已经保持同步了,都是最新的
}
updated钩子函数执行完毕后,运行阶段结束(再次提醒:运行阶段中的两个函数会根据data数据的改变,有选择性的触发0次到多次)

3.销毁阶段

当页面关闭或者离开组件时,会进入到销毁阶段,这个阶段一共有beforeDestroy和destroyed两个生命周期函数 假设现在关闭了页面或者离开了某组件,则会立即进入下一个函数钩子beforeDestroy,执行此函数时,实例上的所有data、methods、filters(过滤器)、指令等等,都是处于可用状态的

代码如下(示例):

beforeDestroy () {}
beforeDestroy执行完毕后,继续执行下一个钩子函数destroyed,此时组件已经被完全销毁了,所有的data、methods、过滤器、指令都不可用

代码如下(示例):

destroyed () {}
当destroyed函数执行完毕后,就标志着销毁阶段结束,至此整个vue生命周期也就结束啦

总结

相信仔细看了这篇文章,对vue生命周期的理解不在话下
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vue.js 是一个流行的 JavaScript 框架,它有一套完整的生命周期钩子函数,用于在组件的不同阶段执行特定的操作。下面是 Vue 组件的生命周期钩子函数及其对应的阶段: 1. beforeCreate: 在实例被创建之前调用,此时 data 和 methods 等属性还未初始化。 2. created: 在实例创建完成后调用,此时可以访问 data 和 methods,并可以进行一些初始化操作。 3. beforeMount: 在编译模板之前调用,此时模板还未被渲染成真实的 DOM。 4. mounted: 在编译模板之后调用,此时模板已经被渲染成真实的 DOM,并且可以进行 DOM 操作。 5. beforeUpdate: 在数据更新之前调用,此时可以进行一些更新准备工作。 6. updated: 在数据更新之后调用,此时 DOM 已经被更新。 7. beforeDestroy: 在实例销毁之前调用,此时实例仍然可用。 8. destroyed: 在实例销毁之后调用,此时实例及其所有的监听器都已被移除。 下面是一个简单的示例代码,演示了 Vue 组件的生命周期函数的使用: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue Lifecycle Demo</title> </head> <body> <div id="app"> {{ message }} </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> new Vue({ el: '#app', data: { message: 'Hello, Vue!' }, beforeCreate() { console.log('beforeCreate hook') }, created() { console.log('created hook') }, beforeMount() { console.log('beforeMount hook') }, mounted() { console.log('mounted hook') }, beforeUpdate() { console.log('beforeUpdate hook') }, updated() { console.log('updated hook') }, beforeDestroy() { console.log('beforeDestroy hook') }, destroyed() { console.log('destroyed hook') } }) </script> </body> </html> ``` 你可以在浏览器中打开该示例,然后在控制台中查看不同生命周期阶段的输出信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值