vue生命周期

vue生命周期图:

由此官方的vue生命周期图我们可以看出:

vue生命周期中一共包含六个钩子:beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestory、destoryed。

1.beforeCreate:vue被创建出来后会初始化,之后执行beforeCreate钩子函数,此时无法访问数据。

借用vue的小例子来验证一下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <div id="app">
        {{ message }}
    </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</html>

<script>
var app = new Vue({
    el: '#app',
    data:{
        message: 'Hello Vue!'
    },
    beforeCreate(){
        console.log(this.$el,'beforeCreate')
        console.log(this.$data,'beforeCreate')
        console.log(this.message,'beforeCreate')
    },
})
</script>

  打开页面控制台看看打印出什么:

  所有的东西都是undefined,也就是说此时页面没有进行任何渲染,数据也没有被赋值,任何东西都是最新的。

2.created:在beforeCreate于created间挂载数据,绑定事件等等,执行完created钩子函数后可以使用数据。

  将上图代码中的beforeCreate钩子换成created再次执行,结果如下图:

  由此图可知:data里的数据已经被赋值,并且能被打印出来,但是el还没有挂载。

3.beforeMount:在created于beforeMount间寻找组件、实例的模板,在这个函数中准备渲染,也可以更改数据(最后一次渲染前更改数据)。

  在created钩子挂载完之后,数据已经被赋值,接下来再beforeMount之前,el会被挂载到html上,如图:

  

  第一个是console.log(this.$el)打印出来的数据,可以看到el已经被挂在到html上,但是对应的数据并没有被渲染上,

4.mounted:渲染dom完成,组件出现在页面中,数据也都处理好了,可以在这里操作真实dom。

  mounted这个钩子执行完之后,页面渲染就已经完成,html上的数据会被赋予新的内容。如果用户不进行页面操作,vue会停留在这一时期,也就是说,如果不在页面不做任何操作,只是了解内容,vue不会挂载新的生命周期钩子。如图:

  

  由上图可以看到html里的{{ message }}已经被成功渲染,并赋予它新的值。

5.beforeUpdate:页面展示完成,操作页面,更改组件或实例的数据执行此函数,然后vue会更新数据重新渲染。

  当用户想要获取新的信息或者更改一些数据时,vue会自动执行beforeUpdate钩子。由于上面的例子没有操作空间,于是我在它里面添加了一个点击按钮改变message的值:

 

<div id="app">
        {{ message }}
        <button v-on:click="change">改变message的值</button>
</div>

并给这个按钮绑定了事件:

var app = new Vue({
    el: '#app',
    data:{
        message: 'Hello Vue!'
    },
    methods:{
        change(){
            this.message = 'Hi!'
        }
    }
})

  接下来,把之前的钩子都执行一遍,并且加上beforeUpdate钩子,看看控制台怎么说:

  

  这是没有点击按钮时控制台展示的数据,执行到mounted时就不再往下执行了。

  点击按钮之后呢:

  

  可以看到,beforeUpdate钩子被执行了,并且数据也都更改了,这就是beforeUpdate钩子要做的事情,每当更新数据的时候,beforeUpdate钩子都会再次执行,然后传递给updated钩子。

6.updated:更新数据后的页面渲染完成,如果再次更新数据,则再次执行beforeUpdate函数,再次进行重新渲染。

  这个钩子是当beforeUpdate钩子执行完之后,所有数据更新完成后,渲染页面的钩子。

7.beforeDestory:实例或组件销毁前调用此函数,此时vue基本凋谢。

8.destoryed:实例或组件销毁后调用,所有绑定的东西都会解除绑定,监听器也会移除,此时vue已枯萎。

以上是个人对vue生命周期的理解,若有错误的地方,还需要大佬们多多指点!

posted @ 2019-06-17 19:17  计算机-前端小白  阅读(216)  评论(0编辑  收藏  举报