首页 > 其他分享 >Vue3中的不同生命周期钩子是如何演变的?他们与传统的Vue2生命周期钩子有何不同?

Vue3中的不同生命周期钩子是如何演变的?他们与传统的Vue2生命周期钩子有何不同?

时间:2024-06-01 16:31:45浏览次数:18  
标签:生命周期 console log 钩子 Vue2 Vue3


随着JavaScript生态系统不断演变,前端框架也在不断进化,以便提供更强大、更简洁的开发体验。Vue.js作为一个流行的前端框架,也在其最新版本Vue 3中进行了重大更新,其中一个显著的变化就是生命周期钩子的演变。本文将详细探讨Vue3中的不同生命周期钩子是如何演变的,并对比它们与传统的Vue2生命周期钩子之间的差异。

Vue2的生命周期钩子回顾

在深入了解Vue3之前,首先回顾一下Vue2中的生命周期钩子。在Vue2中,生命周期钩子主要有以下几个:

  1. beforeCreate:组件实例刚刚被创建,但还没有初始化数据和事件。
  2. created:实例被创建完成,但还没有挂载到DOM。
  3. beforeMount:在挂载开始之前被调用,相关的render函数首次被调用。
  4. mounted:在挂载完成后调用,此时DOM对象已经被插入页面。
  5. beforeUpdate:在数据发生变化,导致重新渲染之前调用。
  6. updated:在重新渲染结束后调用。
  7. beforeDestroy:在实例销毁之前调用。
  8. destroyed:实例销毁并解除绑定之后调用。

这些钩子函数在Vue2中被广泛使用,通过特定时间点来管理组件的行为。

Vue3的生命周期钩子的演变

随着Vue3的推出,生命周期钩子函数得到了重命名和扩展,以便更清晰地表示它们的功能,同时提供更直观的API来使用这些钩子。以下是Vue3中的主要生命周期钩子:

  1. setup:这是一个全新的钩子,位于组件实例初始化的非常早期阶段,适用于组合式API。
  2. onBeforeMount:等同于Vue2的beforeMount
  3. onMounted:等同于Vue2的mounted
  4. onBeforeUpdate:等同于Vue2的beforeUpdate
  5. onUpdated:等同于Vue2的updated
  6. onBeforeUnmount:等同于Vue2的beforeDestroy
  7. onUnmounted:等同于Vue2的destroyed

此外,Vue3还引入了两个新的生命周期钩子,用于更多的场景:

  1. onActivated:当一个被<keep-alive>缓存的组件被激活时调用。
  2. onDeactivated:当一个被<keep-alive>缓存的组件被停用时调用。

具体示例及代码演示

下面通过一个具体的示例来演示Vue3生命周期钩子的使用方式,并对比Vue2中的使用情况。

Vue2中的代码示例
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
        message: "Hello, Vue2!"
    };
  },
  beforeCreate() {
    console.log("beforeCreate");
  },
  created() {
    console.log("created");
  },
  beforeMount() {
    console.log("beforeMount");
  },
  mounted() {
    console.log("mounted");
  },
  beforeUpdate() {
    console.log("beforeUpdate");
  },
  updated() {
    console.log("updated");
  },
  beforeDestroy() {
    console.log("beforeDestroy");
  },
  destroyed() {
    console.log("destroyed");
  }
};
</script>
Vue3中的代码示例
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

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

export default {
  setup() {
    const message = ref("Hello, Vue3!");

    onBeforeMount(() => {
      console.log("onBeforeMount");
    });

    onMounted(() => {
      console.log("onMounted");
    });

    onBeforeUpdate(() => {
      console.log("onBeforeUpdate");
    });

    onUpdated(() => {
      console.log("onUpdated");
    });

    onBeforeUnmount(() => {
      console.log("onBeforeUnmount");
    });

    onUnmounted(() => {
      console.log("onUnmounted");
    });

    return {
      message
    };
  }
};
</script>

主要差异和改进点

1. Setup函数的引入

Vue3中的setup函数是组合式API的核心,提供了一个在组件创建之初执行的地方。相比于Vue2中的beforeCreatecreatedsetup函数整合了数据声明和逻辑定义,变得更加直观和集中。例如:

setup() {
  const count = ref(0);
  return { count };
}

这样,setup函数内的数据和方法可以更好地组织和复用。

2. 命名方式的变化

Vue3中生命周期钩子函数全部以on开头,这种命名方式更为语义化和直观,比如:

onMounted(() => {
  console.log("Component has been mounted.");
});

相比于Vue2的写法,显得更加清晰和易读。

3. Composition API的优势

Vue3中的Composition API通过函数式的方式来调用生命周期钩子,有助于代码逻辑的更好组织和减少冗余代码。通过setup函数,可以实现更灵活的逻辑复用和混入。例如:

function useLifecycle() {
  onMounted(() => {
    console.log("useLifecycle: Component has been mounted.");
  });
}

setup() {
  useLifecycle();
  return {};
}

这样的方式使得代码更模块化,且易于维护和测试。

总结

Vue3中的生命周期钩子相对于Vue2有了显著演变和改进。通过更直观的命名、更灵活的组合式API,开发者能够以更简洁和高效的方式管理组件的生命周期。通过这些改进,Vue3不仅增强了代码的可读性和维护性,更提升了开发体验。


更多面试题请点击:web前端高频面试题_在线视频教程-CSDN程序员研修院

最后问候亲爱的朋友们,并邀请你们阅读我的全新著作

在这里插入图片描述


标签:生命周期,console,log,钩子,Vue2,Vue3
From: https://blog.csdn.net/yuanlong12178/article/details/139375473

相关文章

  • vue3 状态管理库pinia使用测试
    Home.vue组件中使用测试<template><divclass="home"><div>fone:{{fone}}</div><div>ftwo:{{ftwo}}</div><div>ffour:{{ffour}}</div><div&g......
  • vue3 组件级权限控制
    权限控制程度分为:1.页面级2.组件级3.代码级1.页面级这是大部分前端遇到的级别。依靠路由守卫,如果没有权限,就看不到菜单,就进不到页面。不会给页面带来侵入性。什么是侵入性,就是写页面组件的时候,还要考虑权限。2.组件级有没有权限都可以看到页面组件,但是不同权限的人,......
  • vue3 语法测试
    Home.vue<template><divclass="home"><div>{{fone}}</div><div>{{ftwo}}</div><div>{{ffour}}</div><div>{{ffive}}......
  • vue3组件通信与props
    title:vue3组件通信与propsdate:2024/5/31下午9:00:57updated:2024/5/31下午9:00:57categories:前端开发tags:Vue3组件Props详解生命周期数据通信模板语法CompositionAPI单向数据流Vue3组件基础在Vue3中,组件是构建用户界面的基本单位,它们是可复用......
  • 创建和管理一个 CA 及证书的生命周期
    0使用openssl或者gmssl,提交markdown格式文档和转化后的pdf1创建一个根CA,包括生成私钥和根证书。分析证书和0015,0034标准的符合情况2为一台服务器生成一个私钥和证书签署请求(CSR)。3使用根CA对服务器的CSR进行签名,生成服务器证书。4吊销该服务器的证书。5提交生成......
  • Servlet的三种创建方式和生命周期
            Servlet是ServerApplet的简称,是用Java编写的是运行在Web服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可......
  • 记录一下LogicFlow流程图在vue3中的简单使用,配置左侧菜单工具栏和右键菜单
     最终的效果配置画布首先通过npm安装LogicFlownpminstall@logicflow/core--save在vue页面引用LogicFlow和cssimportLogicFlowfrom"@logicflow/core";import"@logicflow/core/dist/style/index.css"; 创建div容器并添加ref<divid="container"ref=......
  • Vue3-路由详解
    文章目录路由对路由的理解安装VueRouter基本切换效果两个注意点路由器工作模式to的两种写法命名路由嵌套路由路由传参query参数params参数路由的props配置replace属性编程式导航重定向更多相关内容可查看路由附git地址:https://gitee.com/its-a-little-bad/vue......
  • Vue生命周期
    1.beforeCreate初始化界面前:在当前阶段data、methods、computed以及watch上的数据和方法都不能被访问。2.created初始化界面后:在实例创建完成后发生,当前阶段已经完成了数据观测,也就是可以使用数据,更改数据,在这里更改数据不会触发updated函数,也就是不会更新视图,SSR可以......
  • vue3毫秒级时间戳转换
    Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。以下2个方法源自于时间工具包:timeutils效果展示:在线时间戳转换工具时间转时间戳/***将某个时间转化成时间戳*时间格式:2019-05-2000:00:00或2019年5月1日00:00:00*返回值:1556640000000,13......