Vue2 的生命周期函数介绍和应用 ——详细总结

10 篇文章 0 订阅
8 篇文章 0 订阅

Vue的生命周期函数,又称生命周期钩子,它是Vue在实例创建、挂载、更新和销毁等过程中所调用的方法,是代表 Vue 页面创建进行某些操作后的状态,因此能在不同过程进行操作

我会按照我学习的顺序,以及遇到的问题,将常见的解释+自我理解进行介绍(可能有部分错误或缺失,欢迎指出)
在这里插入图片描述——借用 Vue官网 的图片进行讲解

在 Vue 实例被创建出来时(new Vue),生命周期函数开始初始化
一、beforeCreate(在创建前)

Vue 实例刚刚创建,数据(data props)以及事件机制($emit $on 等等)都还未初始化

二、created(已创建)

数据和事件机制刚刚初始化,以及数据劫持和观察者实例 watcher 的完成,这个时候才可以访问到它们的数据(data props methods),但是这时还没挂载到 $el 上面

进入判断(has " el " option),如果没有 el 的话就等待创建 el (不知道什么时候会出现后者的情况)

$el 是指向当前组件实例所关联的 DOM 元素的引用(就是通过 this. $el 可以看到其组件内所有DOM元素)

进入判断(has " template " option)有的话将其化为 render 函数,没有的话就解析 $el 上面的 HTML 作为组件的 template

render函数是用来生成虚拟DOM的函数,它通过可以接收一个createElement方法作为参数,用于创建虚拟DOM,灵活控制组件的渲染过程

// main.js
  render: h => h(App),
  
  <span>{{appData}}</span>
  // 等效于
  render:function(createElement){
    // 返回一个虚拟DOM节点
	return createElement('span',this.appData)	
  }
三、beforeMounted(真实DOM 挂载前)

在进入 beforeMounted 之前,Vue 已经解析好 template 的内容,并转化为 render 函数,但是还未生成真实DOM元素,与 beforeMounted 对应的方法有 $forceUpdate(组件强制更新)

this.$forceUpdate()	// 没有参数
随后执行

这个时候开始将 Vue 实例的 template 编译成 render 函数,再将其转化为虚拟DOM,最后转化为真实的DOM(Create vm.$el and replace “el” with it)——将虚拟的DOM赋值到 $el 属性上面的过程

四、mounted(已挂载)

真实的 DOM 元素被挂载到页面时调用,通过 $el 属性可以看到挂载后的DOM,也可以访问并对其进行操作这个过程使用场景非常多 (例如 自定义事件绑定、发送网络请求,获取数据并更新状态 等等)

如果说 mounted 是 Vue 自动挂载的话,那么 $mount 就是 Vue 的手动挂载,它和 mounted 的功能几乎一样
var vm = new Vue({
	data:{
		
	}
})
// 手动挂载到 app(DOM元素)上
vm.$mount('#app')

是不是很眼熟,其实就是 main.js 文件里面的代码

截止 mounted,组件页面的渲染就基本完成了,剩下的生命周期函数,都是在特定的场景才能被触发

五、beforeUpdate (视图更新之前)

当 Vue 实例中的 响应式数据( 视图 )发生改变(when data changes),会进入到 beforeMounted,更新 render 函数里的数据,生成新的虚拟DOM树,通过 Diff 算法对比新旧虚拟DOM树上不一样的节点,然后进行替换局部更新

响应式数据通过插值运算符呈现在视图:

在这里插入图片描述

响应式数据不在视图上:

在这里插入图片描述
因此,只有当响应式而且在视图呈现的数据发生变化时才会进入 beforeUpdate,原因很简单,这是 Vue 性能优化的一种方法,数据与DOM无关时并不会再次生成虚拟DOM导致整个组件的刷新,可以节省不必要资源,如果非要进行刷新,可以使用 this.$forceUpdate()

六、updated(视图更新完成)

这里代表新的数据已经重新挂载到 DOM 上面,然后就会准备再次进入 mounted,进行了一次循环

上面两个钩子函数常在路由跳转时生效

七、beforeDestroy (组件销毁之前)

在组件销毁之前所进行的操作,在这个过程可以操作实例访问 DOM 元素(可以进行关闭定时器,注销事件总线,保存用户数据或状态等等)

随后执行( teardown watchers,childcomponents and event listeners)

翻译:卸载 watchers(观察者实例),childcomponents(子组件)and event listeners(事件监听)

八、destroyed (组件销毁完成)

Vue 实例上面的东西全部被移除(常在路由跳转/切换时触发)

以上内容均为本人学习总结知识点,如有错漏欢迎指出

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 2.x 的生命周期钩子函数可以帮助我们在组件的不同阶段执行特定的代码。下面是 Vue.js 2.x 中常用的生命周期钩子函数及其使用方法: 1. beforeCreate: 在实例被创建之前调用。此时,数据观测 (data observer) 和事件/侦听器 (event/watcher) 尚未初始化。 2. created: 实例已经创建完成后调用。此时,已经完成数据观测 (data observer),将会初始化事件/侦听器,但尚未挂载 (mount) 到 DOM 上。 3. beforeMount: 在挂载开始之前被调用。此时,模板已经编译完成,但尚未将其挂载到 DOM 中。 4. mounted: 实例挂载到 DOM 后调用。此时,Vue 实例的根 DOM 元素已经编译、替换,并且可以进行 DOM 操作。 5. beforeUpdate: 在更新之前被调用,发生在虚拟 DOM 重新渲染和打补丁之前。可以在该钩子中对更新之前的状态进行修改。 6. updated: 在更新完成后调用,发生在虚拟 DOM 重新渲染和打补丁之后。此时,组件已经更新,可以执行依赖于 DOM 的操作。 7. beforeDestroy: 在实例销毁之前调用。此时,实例仍然可用,可以执行一些清理操作。 8. destroyed: 实例销毁后调用。此时,Vue 实例的所有指令和事件监听器都已被移除,所有子实例也被销毁。 这些生命周期钩子函数可以通过在 Vue 组件的 `methods` 选项中定义相应的方法来使用。例如,要使用 `created` 钩子函数,可以在 Vue 组件中添加如下代码: ```javascript export default { created() { // 在组件创建完成后执行的代码 // 可以在这里进行一些初始化操作,如发送网络请求、订阅事件等 }, } ``` 通过使用这些生命周期钩子函数,我们可以在不同的阶段执行特定的代码逻辑,从而更好地管理组件的生命周期和行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值