vue生命周期

简介: 【8月更文挑战第1天】vue生命周期

Vue的生命周期是指Vue实例从创建到销毁的整个过程。在这个过程中,Vue提供了一系列的生命周期钩子(Lifecycle Hooks),允许开发者在组件的不同阶段执行自定义逻辑。了解Vue的生命周期对于编写高效、可维护的代码至关重要。

Vue生命周期的主要阶段

Vue的生命周期可以大致分为以下四个阶段:

  1. 创建阶段

    • beforeCreate:在实例初始化之后,数据观测(data observation)和事件/侦听器的配置之前被调用。此时,组件的数据和方法都还未初始化。
    • created:在实例创建完成后被立即调用。在这一步,组件的数据观测、计算属性、方法和事件回调都已经初始化,但模板还未挂载到DOM,$el属性目前不可见。
  2. 挂载阶段

    • beforeMount:在挂载开始之前被调用,相关的render函数首次被调用。此时模板编译完成,但还未渲染到DOM。
    • mounted:在el被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子。此时,组件已经渲染到DOM,可以进行DOM操作。
  3. 更新阶段

    • beforeUpdate:数据更新时调用,发生在虚拟 DOM 打补丁之前。此时数据已经是最新的,但DOM还没有更新。
    • updated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用这个钩子。此时,DOM已经更新。
  4. 销毁阶段

    • beforeDestroy:在实例销毁之前调用。在这一步,实例仍然完全可用,可以进行一些清理操作,如取消订阅、清除定时器等。
    • destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

实现一个简单的生命周期模拟

虽然Vue的生命周期是内置并自动管理的,但我们可以模拟一个简单的生命周期过程来更好地理解它。以下是一个简单的JavaScript类,模拟了Vue的部分生命周期:

class SimpleVue {
   
    constructor(options) {
   
        this.$options = options;
        this.data = options.data;
        this.beforeCreate();
        this.created();

        if (this.$options.el) {
   
            this.beforeMount();
            // 模拟挂载过程
            document.getElementById(this.$options.el).innerHTML = this.render();
            this.mounted();
        }
    }

    beforeCreate() {
   
        console.log('beforeCreate');
    }

    created() {
   
        console.log('created');
        // 在这里可以访问到data
        console.log(this.data);
    }

    beforeMount() {
   
        console.log('beforeMount');
    }

    mounted() {
   
        console.log('mounted');
    }

    render() {
   
        // 这里简单地返回data中的某个值
        return `Data: ${
     this.data}`;
    }
}

// 使用示例
new SimpleVue({
   
    el: 'app',
    data: 'Hello, Vue!'
});

这个SimpleVue类模拟了Vue的beforeCreatecreatedbeforeMountmounted四个生命周期钩子。请注意,这只是一个非常简化的示例,实际的Vue生命周期涉及更多的内部机制和复杂性。不过,通过这个示例,我们可以更好地理解Vue生命周期的基本概念和流程。

目录
相关文章
|
2天前
|
JavaScript 前端开发
Vue项目使用px2rem
Vue项目使用px2rem
|
3天前
|
缓存 JavaScript
vue学习(12)计算属性
vue学习(12)计算属性
15 3
|
3天前
|
JavaScript
vue学习(10)事件修饰符
vue学习(10)事件修饰符
14 3
|
3天前
|
缓存 JavaScript
vue学习(12)计算属性
vue学习(12)计算属性
13 2
|
3天前
|
JavaScript
vue学习(11)键盘事件
vue学习(11)键盘事件
14 2
|
4天前
|
JavaScript
VUE中el-input阻止冒泡防止触发父级事件
VUE中el-input阻止冒泡防止触发父级事件
|
4天前
|
JavaScript
vue学习(9)事件处理
vue学习(9)事件处理
23 2
|
2天前
|
JavaScript
Vue组件传值异步问题--子组件拿到数据较慢
Vue组件传值异步问题--子组件拿到数据较慢
7 0
|
2天前
|
缓存 JavaScript
Vue中的keep-alive是什么意思?以及如何使用
Vue中的keep-alive是什么意思?以及如何使用
|
3天前
|
JavaScript
vue知识点
vue知识点
9 0