vue3中的生命周期

news/2024/7/7 18:38:41

一、vue3中的选项式生命周期

Vue 3中的选项式生命周期钩子基本上与Vue 2保持一致,它们都是定义在Vue实例的对象参数中的函数,它们在Vue实例的生命周期的不同阶段被调用。简单来说,生命周期钩子就是Vue.js特别提供的一些函数,会在我们的实例挂在,更新,卸载等过程中被调用的函数

以下是Vue 3中主要的选项式生命周期钩子:

  1. beforeCreate:在实例初始化之后、数据观测(data observer)和event/watcher事件配置之前被调用。
  2. created:在实例创建完成后被立即调用,此阶段完成了数据观测,但未挂载DOM$el属性目前不可见。
  3. beforeMount:在挂载开始之前被调用,相关的render函数首次被调用。
  4. mounted:实例被挂载后调用,此时el被新创建的vm.$el替换了。
  5. beforeUpdate:数据更新时调用,发生在虚拟DOM打补丁之前。
  6. updated:由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。
  7. beforeUnmount:实例销毁之前调用。在这一步,实例仍然完全可用。
  8. unmountedVue实例销毁后调用。

例子:

export default {
  data() {
    return {
      message: 'Hello Vue!'
    }
  },
  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')
  }
}

以上例子定义了一个Vue实例,每一个生命周期钩子函数都会在相应的阶段执行并打印对应的生命周期钩子名称。这提供了在不同阶段进行定制化操作的可能,例如,我们可以在mounted生命周期钩子中进行DOM操作,在created生命周期钩子中进行数据的初始化等。

二、vue3中组合式生命周期

Vue3的组合式API提供了一套新的生命周期钩子,与Vue2中的选项式生命周期钩子有着对应关系。在Composition API中,组合式生命周期钩子有:

  1. onBeforeMount:对应Vue2中的beforeMount钩子,Vue实例挂载之前调用。

  2. onMounted:对应Vue2中的mounted钩子,Vue实例挂载完成后调用。

  3. onBeforeUpdate:对应Vue2中的beforeUpdate钩子,数据更新时调用,但在DOM更新前。

  4. onUpdated:对应Vue2中的updated钩子,数据更新后在DOM更新后调用。

  5. onBeforeUnmount:对应Vue2中的beforeDestroy钩子,Vue实例销毁前调用。

  6. onUnmounted:对应Vue2中的destroyed钩子,Vue实例销毁后调用。

当然啊,官方给出的钩子比这多,这里我只是列举出一些比较常用的。

vue3官网:https://cn.vuejs.org/api/composition-api-lifecycle.html#onrendertriggered

在这里插入图片描述

举个例子来理解:

import { ref, onBeforeMount, onMounted } from 'vue';

export default {
  setup() {
    const name = ref('Vue3');

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

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

    return {
      name
    };
  }
}

在这个例子中,我们首先通过 ref 创建了一个响应式引用 name,然后是 onBeforeMountonMounted 的生命周期钩子,分别对应 Vue2 中的 beforeMountmounted

在组件实例化时会首先执行 onBeforeMount 中的函数,输出 ‘onBeforeMount’,然后执行 onMounted 中的函数,输出 ‘onMounted’。

生命周期钩子的主要作用是在特定时点运行用户自定义的函数,这些函数可能包含数据获取、数据处理、状态修改等逻辑。利用这样的设计,开发者可以更好的控制代码执行的时机和逻辑。

在组合式API中,这些生命周期钩子不再像Vue2那样作为组件选项存在,而是独立的函数。这使得我们可以把相关逻辑组合在一起,理解和复用更方便。

三、vue3中选项式生命周期和组合式生命周期共存时的执行顺序

在Vue3中,组合式API和选项式API可以共存,对于生命周期钩子,在二者同时使用的情况下,其执行顺序为:首先执行组合式API的生命周期钩子,然后执行选项式API的生命周期钩子

比如在一个实体中,同时使用了组合式API的onMounted和选项式API的mounted,则执行顺序为先执行onMounted,然后执行mounted

以下是一个简单的例子:


import { onMounted } from 'vue'

export default {
  mounted() {
    console.log('选项式API的mounted生命周期钩子')
  },

  setup() {
    onMounted(() => {
      console.log('组合式API的onMounted生命周期钩子')
    });
  }
}

控制台输出的结果应该是:

'组合式API的onMounted生命周期钩子'
'选项式API的mounted生命周期钩子'

这就完成了检验生命周期钩子执行顺序的验证,首先是组合式API的onMounted,然后是选项式API的mounted。

四、vue2中的生命周期和vue3的组合式生命周期对比

Vue2 生命周期Vue3 生命周期功能描述
beforeCreatesetup在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
createdsetup在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event事件回调。然而,挂载阶段还没开始,$el属性目前还不可见。
beforeMountonBeforeMount在挂载开始之前被调用:相关的 render 函数首次被调用。
mountedonMountedel 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。
beforeUpdateonBeforeUpdate数据更新时调用,发生在虚拟DOM打补丁之前。这里适合在更新之前访问现有的DOM,比如手动移除已添加的事件监听器。
updatedonUpdated由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。
beforeDestroyonBeforeUnmount在实例销毁之前调用。在这一步,实例仍然完全可用。
destroyedonUnmounted在实例销毁之后调用。调用后,所有的事件监听器都会被移除,所有的子实例也都会被销毁。

Vue3 使用 Composition API 引入了新的生命周期钩子,但是它们和 Vue2 中的生命周期钩子有直接的对应。使用setup()来代替 beforeCreate created,并提供了一系列“on”钩子函数。


http://lihuaxi.xjx100.cn/news/1330626.html

相关文章

代码随想录算法训练营第六十三天—图论补充

第一题、最大岛屿面积 力扣题目链接 class Solution { private:int count;int dir[4][2] {0, 1, 1, 0, -1, 0, 0, -1};void dfs(vector<vector<int>>& grid, vector<vector<bool>>& visited, int x, int y){for(int i 0; i < 4; i){int …

【已解决】词云图只显示方框,无法正确显示中文

文章目录 报错及效果图报错代码解决后效果图 解决方案 报错及效果图 报错代码 from wordcloud import WordCloud def drawing_wordcloud(jieba_split):colormaps colors.ListedColormap([#33b846, #a9be70, #e50000])# 生成词云&#xff08;自定义样式&#xff09;mywc1 Wor…

spring boot+MySQL实现班级综合测评管理系统

随着电子技术的普及和快速发展&#xff0c;线上管理系统被广泛的使用&#xff0c;有很多事业单位和商业机构都在实现电子信息化管理&#xff0c;班级综合测评管理也不例外&#xff0c;由比较传统的人工管理转向了电子化、信息化、系统化的管理。 传统的班级综合测评管理系统&am…

Windows+IDEA+Nginx反向代理本机实现简单集群

先简单创建一个项目&#xff0c;可以是Maven也可以是Spring Initializr&#xff0c;如果是 Maven则需要自己配置启动类 按照目录路径创建controller类 package com.cloud.SR.controller;import org.springframework.beans.factory.annotation.Autowired; import org.springfram…

Sql 语句小课堂8:求特定字段平均值的问题

Sql 语句小课堂8&#xff1a;求特定字段平均值的问题 问题来源初始数据超标条件方案一&#xff1a;得出汇总结果方案二&#xff1a;在原有数据上附加其结果 小结 问题来源 最近老顾变得原来越咸鱼了&#xff0c;好久没去逛 CSDN 问答了&#xff0c;于是灵感枯竭&#xff0c;不…

word绘制横向表格

最近写小论文&#xff0c;表格太宽需要绘制横向表格&#xff0c;找了半天教程说的都不是很详细&#xff0c;我学习了一下决定自己写个教程。 我要在一和二之间创建一个横向表格。首先在一后面添加一个分节符号。布局->分隔符->分节负下一页。 再在二之前添加一个分节符号…

第二章:数据的表示与运算

文章目录 第二章:数据的表示与运算2.1 数制与编码1.进位计数制 及其 相互转换2.定点数的编码表示1.无符号数2.有符号数 (整数、小数)(1)原码(2)反码(3)补码(4)移码2.2 运算电路 和 定点数的运算方法1.运算电路 (基本运算部件)(1)逻辑门电路(2)加法器标志位的生成(3)多路选择器…

MySQL数据库(三)

前言 聚合查询、分组查询、联合查询是数据库知识中最重要的一部分&#xff0c;是将表的行与行之间进行运算。 目录 前言 一、聚合查询 &#xff08;一&#xff09;聚合函数 1、count 2、sum 3、avg 4、max 5、min 二、分组查询 &#xff08;一&#xff09;group by …