vue组件有生命周期吗

Vue组件有生命周期,每个Vue组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到DOM,以及在数据改变时更新DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码 。

Vue组件有生命周期吗?

是的,Vue组件有生命周期,在Vue中,组件的生命周期分为以下几个阶段:创建、挂载、更新、销毁,每个阶段都有相应的生命周期钩子函数,我们可以在这些钩子函数中执行一些操作,以便在组件的不同阶段执行特定的任务,下面我们详细介绍一下Vue组件的生命周期。

vue组件有生命周期吗

1. 创建阶段

在Vue实例化过程中,会依次调用组件的beforeCreatecreatedafterCreate生命周期钩子函数。beforeCreatecreated是在组件实例被创建之后立即调用的,而afterCreate是在组件实例被创建并完成初始化之后调用的。

export default {
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  beforeCreate() {
    console.log('beforeCreate');
  },
  created() {
    console.log('created');
  },
  afterCreate() {
    console.log('afterCreate');
  }
};

2. 挂载阶段

vue组件有生命周期吗

当Vue实例将组件渲染到DOM中时,会依次调用组件的beforeMountmountedafterMount生命周期钩子函数。beforeMountmounted是在组件挂载到DOM之前和之后立即调用的,而afterMount是在组件挂载到DOM之后调用的。

export default {
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  beforeMount() {
    console.log('beforeMount');
  },
  mounted() {
    console.log('mounted');
  },
  afterMount() {
    console.log('afterMount');
  }
};

3. 更新阶段

当Vue实例接收到数据更新通知时,会重新渲染组件,并依次调用组件的beforeUpdateupdatedafterUpdate生命周期钩子函数。beforeUpdateupdated是在组件更新之前和之后立即调用的,而afterUpdate是在组件更新之后调用的。

vue组件有生命周期吗

export default {
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  beforeUpdate() {
    console.log('beforeUpdate');
  },
  updated() {
    console.log('updated');
  },
  afterUpdate() {
    console.log('afterUpdate');
  }
};

4.销毁阶段

当Vue实例卸载时,会依次调用组件的beforeDestroydestroyedafterDestroy生命周期钩子函数。beforeDestroydestroyed是在组件销毁之前和之后立即调用的,而afterDestroy是在组件销毁之后调用的,在这些钩子函数中,我们可以进行一些资源释放的操作,例如取消事件监听、删除定时器等。

export default {
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  beforeDestroy() {
    console.log('beforeDestroy');
    vm.$off('event-name'); //取消事件监听
    vm.timer = null; //删除定时器
    vm = null; //设置为null,避免在回调函数中访问已经销毁的实例导致错误
    vm.$destroy(); //销毁实例(可选)如果使用了Vue3的Composition API,这一步可以省略,因为在组件销毁时会自动触发这个方法,但在Vue2中,我们需要手动调用这个方法来确保实例被正确销毁,在某些情况下,我们可能需要手动销毁一个已经解除了父子关系的实例(例如使用v-if渲染的元素),这时就需要手动调用这个方法。
    vm = null; //再次设置为null,确保实例已经被销毁,这是为了防止在回调函数中访问已经销毁的实例导致错误,在Vue2中,我们需要手动设置实例为null,而不是直接将其置为undefined或者null,因为在某些情况下(例如使用闭包捕获变量),将实例设置为null并不能完全解除其引用关系,所以我们需要先将其设置为null,然后再检查是否已经被置为null,如果已经被置为null,那么就不需要再执行任何操作了,否则,我们需要继续执行后续的操作,例如手动移除DOM元素等,我们需要再次将实例设置为null,以确保实例已经被完全销毁,这样可以避免在回调函数中访问已经销毁的实例导致错误。

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/125414.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
酷盾叔
上一篇 2023-12-30 06:36
下一篇 2023-12-30 06:39

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入