Vue生命周期钩子函数

每一个组件或者实例都会经历一个完整的生命周期,总共分为三个阶段:初始化、运行中、销毁。
先放一张Vue官网的生命周期图:
在这里插入图片描述
vue有8种生命周期钩子函数:

  1. beforeCreate --创建前
    实例、组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载到,只是一个空壳,无法访问到数据和真实的dom,一般不做操作。

  2. created --创建后
    挂载数据,绑定事件等等,然后执行created函数,这个时候已经可以使用到数据,也可以更改数据,在这里同步更改数据不会触发updated函数,一般可以在这里做初始数据的获取。 做异步ajax,绑定初始化事件 。

  3. beforeMount --渲染前
    接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated,这是在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始化数据的获取

  4. mounted --渲染后
    接下来开始render,渲染出真实dom,然后执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情…

  5. beforeUpdate --更新前
    当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿。

  6. updated —更新后
    当更新完成后,执行updated,数据已经更改完成,dom也重新render完成,可以操作更新后的dom。

  7. beforeDestroy —销毁前
    当经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等。

  8. destroyed —销毁后
    组件的数据绑定、监听…去掉后只剩下dom空壳,这个时候,执行destroyed(组件销毁时触发,vue实例解除了事件监听以及和dom的绑定(无响应了),但DOM节点依旧存在),在这里做善后工作也可以。
    总结
    (1)生命周期函数的执行顺序与书写的顺序无关
    (2)更新阶段的生命周期函数是在组件的数据发生变化的时候执行的
    (3)在有组件的嵌套的时候,生命周期函数的执行顺序是:父组件的beforeCreate->created->beforeMount;然后执行子组件的beforeCreate->created->beforeMount->mounted;最后执行父组件的mounted函数;各个子组件的生命周期函数的执行顺序按加载顺序执行;从这里可以知道,在父组件未完成挂载之前,子组件就完成了挂载,这个时候父子组件是可以进行数据的传递的
    (4)组件进行销毁的时候,是先销毁的是父组件,然后销毁子组件
    (5)以下是代码
    父组件

				export default {
				  name: "Layout",
				  components: { MyHeader, MyChild },
				  methods: {
				    send() {
				    // this.inputValue =
				       this.$router.push("myheader");
				    }
				  },
				  beforeCreate() {
				    console.log("我是函数beforeCreate");
				  },
				  created() {
				    console.log("我是函数created");
				  },
				  beforeMount() {
				    console.log("我是函数beforeMount");
				  },
				  mounted() {
				    console.log("我是函数mounted");
				  },
				  beforeUpdate() {
				    console.log("我是beforeUpdate");
				  },
				  updated() {
				    console.log("我是updated函数");
				  },
				  beforeDestroy() {
				    console.log("我是函数beforeDestory");
				  },
				  destroyed() {
				    console.log('我是函数destoryed');
				  },
				  filters: {
				    dataFormat(msg) {
				      return msg + "xxxxx";
				    }
				  },
				  data() {
				    return {
				      inputValue: ""
				    };
				  }
				};

子组件

   		export default {
   		   beforeCreate() {
   		    console.log("我是MyChild函数beforeCreate");
   		  },
   		  created() {
   		    console.log("我是MyChild函数created");
   		  },
   		  beforeMount() {
   		    console.log("我是MyChild函数beforeMount");
   		  },
   		  mounted() {
   		    console.log("我是MyChild函数mounted");
   		  },
   		  beforeUpdate() {
   		    console.log("我是MyChild函数beforeUpdate");
   		  },
   		  updated() {
   		    console.log("我是MyChild函数updated");
   		  },
   		  beforeDestroy() {
   		    console.log("我是MyChild函数beforeDestory");
   		  },
   		  destroyed() {
   		    console.log('我是MyChild函数destroyed');
   		  }
   		}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值