vue3生命周期钩子

举报
林欣 发表于 2025/03/16 21:09:46 2025/03/16
【摘要】 Vue 3 引入了 Composition API,这允许开发者以一种更加模块化和可复用的方式组织和复用代码。尽管 Options API 仍然被支持,但 Composition API 提供了一些新的生命周期钩子,并且可以更灵活地管理组件的生命周期。以下是 Vue 3 中常用的生命周期钩子及其对应的 Options API 和 Composition API 表示方式: Options A...

Vue 3 引入了 Composition API,这允许开发者以一种更加模块化和可复用的方式组织和复用代码。尽管 Options API 仍然被支持,但 Composition API 提供了一些新的生命周期钩子,并且可以更灵活地管理组件的生命周期。

以下是 Vue 3 中常用的生命周期钩子及其对应的 Options API 和 Composition API 表示方式:

Options API 生命周期钩子

  1. beforeCreate

    • 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
  2. created

    • 在实例创建完成后被立即调用。在这一步,实例已完成数据观测、属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
  3. beforeMount

    • 在挂载开始之前被调用:相关的 render 函数首次被调用。
  4. mounted

    • el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果根实例挂载到了文档内,当 mounted 被调用时,组件已经在其真实的 DOM 里。
  5. beforeUpdate

    • 数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。
  6. updated

    • 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用这个钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致无限更新循环。
  7. beforeUnmount

    • 在卸载组件实例之前调用。在这个阶段,实例仍然是完全可用的。
  8. unmounted

    • 卸载组件实例后调用。调用后,组件实例指示的所有东西都会解绑,所有的事件监听器会被移除,所有的子实例也会被销毁。

Composition API 生命周期钩子

Vue 3 的 Composition API 提供了与 Options API 相对应的生命周期钩子函数,这些函数需要在 setup 函数中调用。

  1. beforeCreatecreated

    • setup 函数中,由于 setup 是在 beforeCreatecreated 之间执行的,所以这两个生命周期钩子在 setup 函数中无法直接使用。但是,setup 函数本身可以视为一个替代。
  2. beforeMountmounted

    • onBeforeMountonMounted
  3. beforeUpdateupdated

    • onBeforeUpdateonUpdated
  4. beforeUnmountunmounted

    • onBeforeUnmountonUnmounted

示例代码

Options API

<template>
  <div>Hello, Vue 3!</div>
</template>

<script>
export default {
  name: 'MyComponent',
  data() {
    return {
      message: 'Hello, Vue 3!'
    };
  },
  beforeCreate() {
    console.log('beforeCreate');
  },
  created() {
    console.log('created');
  },
  beforeMount() {
    console.log('beforeMount');
  },
  mounted() {
    console.log('mounted');
  },
  beforeUpdate() {
    console.log('beforeUpdate');
  },
  updated() {
    console.log('updated');
  },
  beforeUnmount() {
    console.log('beforeUnmount');
  },
  unmounted() {
    console.log('unmounted');
  }
};
</script>

Composition API

<template>
  <div>Hello, Vue 3!</div>
</template>

<script>
import { onMounted, onUpdated, onBeforeUnmount, onUnmounted } from 'vue';

export default {
  name: 'MyComponent',
  setup() {
    onMounted(() => {
      console.log('mounted');
    });

    onUpdated(() => {
      console.log('updated');
    });

    onBeforeUnmount(() => {
      console.log('beforeUnmount');
    });

    onUnmounted(() => {
      console.log('unmounted');
    });

    // 其他 Composition API 代码
    return {};
  }
};
</script>

使用 Composition API 时,生命周期钩子是通过导入和调用对应的函数来实现的,这使得在大型组件中更容易管理和复用逻辑。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。