vue生命周期以及钩子函数

本文深入解析Vue.js的生命周期,包括初始化、运行中和销毁三个阶段的钩子函数,如beforeCreate、created、beforeMount、mounted等,阐述它们的执行时机及用途。

Vue生命周期

概念
组件或者实例从创建到销毁的一系列过程叫做生命周期;
一个组件或者实例的什么周期都是从new开始的;
实例化之后,内部就会做一些初始化事件与生命周期相关的配置
钩子函数
vue在整个生命周期中提供了一些函数,叫做钩子函数,可以在内部实现一些业务逻辑,并且这些函数会在一些特定的场合下去执行(在生命周期的某一个时刻进行触发)
生命周期的钩子函数大致分为三个阶段
初始化阶段:beforeCreate() created(可以获取数据) beforeMount (render)  mounted
运行中阶段:beforeUpdate updated (mouted ==> change data )
销毁阶段:  beforeDestroy destroyed
下面介绍以下各个钩子函数
先创建一个组件
<body>
     <div id="app"> 
        <my-component></my-component>
    </div>
  	<template id="my-component">
        <div>
            <h1 id="title">{{msg}}</h1> 
            <input type="text" v-model='msg'>
        </div>
    </template>
</body>
<script>
	Vue.component("my-component",{
    	template:"#my-component",
        data(){
        	return {
            	msg:"hello"
            }
        })
     new Vue().$mount("#app");
</script>
初始化阶段的钩子函数
beforeCreate(){
	console.log(this.msg,document.getElementById("title"))
}
  这个钩子函数初始化阶段就会触发执行
  数据获取不到,并且真实dom也获取不到
created(){
	console.log(this.msg,document.getElementById("title"))
    this.timer = setInterval(() => {
          this.msg += "哈"
     }, 3000);
}
初始化阶段就会触发执行
created钩子函数代表数据已经挂载完毕,但是真实dom节点还是没有渲染出来。
通常在这个钩子函数里面,我们可以进行初始化的一些事件绑定与进行ajax异步请求
 注意:在这个钩子函数里面,如果同步的更改数据的话,是不会影响到运行时钩子函数执行
beforeMount(){
	console.log(this.msg,document.getElementById("title"))
}
初始化阶段就会触发执行
 接下来的过程,就是组件或者实例去查找各自的模板,将其编译成虚拟dom
 beforeMount代表真实dom马上要被渲染出来了,但是页面中还没有生成真实dom
 beforeMount与created钩子函数用法基本一致,也可以进行初始化事件绑定与ajax请求
mounted(){
	console.log(this.msg,document.getElementById("title")
}
初始化阶段就会触发执行
mounted钩子函数是初始化阶段的最后一个钩子函数
数据已经挂载完毕了,并且真实的dom元素也已经生成好了
一般可以进行一些实例化操作 --> 拖拽
运行中阶段的钩子函数
beforeUpdate(){
	console.log("beforeUpdate...",document.getElementById("title").innerHTML,this.msg)
}
初始化的时候不会执行
注意:前提是dom已经挂载完毕之后,再去修改数据的时候,这个钩子函数才会执行
beforeUpdate是dom获取的数据内容是更新之前的内容
updated(){
	console.log("updated...",document.getElementById("title").innerHTML,this.msg)
}
初始化的时候不会执行
updated是dom获取的数据内容是更新之后的内容
数据改变,内部生成新的虚拟dom树,进行diff比较,再去重新渲染真实dom
销毁阶段的钩子函数
beforeDestroy(){
	//定时器及时清掉
    clearInterval(this.timer)
}
当组件销毁的时候,才会触发此方法
这个钩子函数代表销毁之前,可以做一些善后的操作,例如清除定时器相关的事情。
destroyed(){
	console.log("destroyed...")
}
当组件销毁的时候,才会触发此方法
组件的dom结构还是存在的,只不过这个组件已经没有活力了。
失去了双向数据的绑定效果,也不能监听数据的改变。
Vue生命周期是指Vue实例从创建到销毁的整个过程,而钩子函数则是在不同的生命周期阶段执行的函数Vue提供了一系列的钩子函数,用于在特定的生命周期阶段执行相应的操作。 以下是Vue生命周期钩子函数及其对应的生命周期阶段: 1. beforeCreate:在实例初始化之后,数据观测和事件配置之前被调用。 2. created:在实例创建完成后被立即调用。此时实例已完成以下配置:数据观测、属性和方法的运算、watch/event事件回调。然而,挂载阶段还没开始,$el属性目前不可见。 3. beforeMount:在挂载开始之前被调用。相关的render函数首次被调用。 4. mounted:el被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子函数。此时,实例已完成以下配置:编译模板、把data里面的数据和模板生成html。注意此时还没有挂载到页面上。 5. beforeUpdate:数据更新时调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子函数中对更新之前的状态做一些操作。 6. updated:由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子函数。可以执行依赖于DOM的操作,但是要避免更改数据。 7. beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。 8. destroyed:实例销毁后调用。此时,所有的事件监听器被移除,所有的子实例也被销毁。 下面是一个简单的示例,演示了Vue生命周期钩子函数的使用: ```javascript new Vue({ el: '#app', data: { message: 'Hello Vue!' }, beforeCreate: function() { console.log('beforeCreate'); }, created: function() { console.log('created'); }, beforeMount: function() { console.log('beforeMount'); }, mounted: function() { console.log('mounted'); }, beforeUpdate: function() { console.log('beforeUpdate'); }, updated: function() { conso.log('updated'); }, beforeDestroy: function() { console.log('beforeDestroy'); }, destroyed: function() { console.log('destroyed'); } }); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值