vue - 生命周期

291 阅读2分钟

开发过程中,用vue会比较多,我们经常用mounted,这类函数其实就是vue的生命周期函数。这里我们来看一下vue的生命周期。

生命周期

什么是生命周期?其实就是一个对象的生老病死。

在vue中,这里的对象就是vue的实例对象。

vue生命周期函数

首先,我们看一下vue官网给的生命周期图。

vue的生命周期

从上面的图可以看出,vue的生命周期,有4个过程:create,mount,update,destroy。

当然,vue这里也做得很贴心,每个过程的钩子有两个,一前一后。

create

create,vue实例创建的过程,当我们new Vue()实例的时候,就会触发create

new Vue({
    // 实例创建前
    beforeCreate: function() {
        console.log('beforeCreate')
    },
    // 实例创建后
    created: function() {
        console.log('created')
    },
})

mount

mount,把vue实例挂载到dom节点时触发的函数。

触发mount有两种方法

var vm = new Vue({
    // 第一种,直接在vue初始化的时候传入el对象
    el: '#app',
    // 实例挂载前
    beforeMount: function() {
        console.log('beforeMount')
    },
    // 实例挂载后
    mounted: function() {
        console.log('mounted')
    },
})
// 第二种,调用vm.$mount挂载到dom节点
vm.$mount('#app')

如果vue实例没有挂载dom节点,那么mount事件也不会触发。

update

update,由于数据更改导致的虚拟 DOM 重新渲染和打补丁时,就是触发该事件。

如果只修改数据,不触发重新渲染,那么就不会触发update事件。

<div id="app">
    <span>{{ a }}</span>
</div>
new Vue({
    el: '#app',
    data: {
        a: 1
    },
    mounted: function() {
        // 改变a的值
        this.a = 4
    },
    // 更新虚拟dom前
    beforeUpdate: function() {
        console.log('beforeUpdate')
    },
    // 更新虚拟dom之后
    updated: function() {
        console.log('updated')
    }
})

destroy

vue实例销毁时,就会触发destroy事件。

var vm = new Vue({
    el: '#app',
    // 实例销毁前
    beforeDestroy: function() {
        console.log('beforeDestory')
    },
    // 实例销毁后
    destroyed: function() {
        console.log('destroyed')
    }
})
// 调用vm.$destroy销毁vue实例
vm.$destroy()

所以,我们总结一下,vue的整个生命周期是这样的: create -> mount -> update -> destroy

写在最后

生命周期,可能一开始的时候没有觉得会很常用到,但是当项目做久之后,会发现理解生命周期是多么重要的~