【Vue3】组件生命周期

【Vue3】组件生命周期

  • 背景
  • 简介
  • 开发环境
  • 开发步骤及源码

背景

随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。

简介

本文介绍 Vue 组件生命周期。

Vue 组件生命周期包含四个阶段:

  • 创建
  • 挂载
  • 更新
  • 销毁

生命周期各阶段对应以下 Hooks 函数:

阶段Vue3 Hooks 函数Vue2 Hooks 函数
创建 - 创建前setupbeforeCreate
创建 - 创建完毕setupcreated
挂载 - 挂载前onBeforeMountbeforeMount
挂载 - 挂载完毕onMountedmounted
更新 - 更新前onBeforeUpdatebeforeUpdate
更新 - 更新完毕onUpdatedupdated
销毁 - 销毁前onBeforeUnmountedbeforeDestroy
销毁 - 销毁完毕onUnmounteddestroyed

Vue3 与 Vue2 生命周期 Hooks 函数的区别:

  • Vue3 创建阶段对应 setup
  • Vue3 Hooks 函数名添加了 on 前缀;
  • Vue3 挂载(Mount)和销毁(Unmount)对应的 Hooks 函数名相互对应。

本文主要演示 Vue3 生命周期 Hooks 函数代码。

开发环境

分类名称版本
操作系统WindowsWindows 11
IDEVisual Studio Code1.91.1

开发步骤及源码

1> 创建 Vue3 工程,参考:【Vue3】工程创建及目录说明。

2> 删除 src 目录下 assetscomponents 目录。

3> 修改 src 目录下 main.ts

import { createApp } from 'vue'
import App from './App.vue'createApp(App).mount('#app')

4> 自定义功能组件 src/components/Demo.vue,在生命周期各阶段对应的 Hooks 函数中执行打印。

<template><div class="demo" @click="changeColor" :style="{ backgroundColor: color }"><h1>{{ title }}</h1></div>
</template><script setup lang="ts">
import { onBeforeMount, onBeforeUnmount, onBeforeUpdate, onMounted, onUnmounted, onUpdated, ref } from 'vue'const title = ref('自定义功能组件')
const color = ref('orange')function changeColor() {color.value = (color.value == 'orange') ? 'yellow' : 'orange'
}console.log('创建:', title.value)onBeforeMount(() => {console.log('挂载前:', title.value)
})onMounted(() => {console.log('挂载完毕:', title.value)
})onBeforeUpdate(() => {console.log('更新前:', title.value)
})onUpdated(() => {console.log('更新完毕:', title.value)
})onBeforeUnmount(() => {console.log('销毁(卸载)前:', title.value)
})onUnmounted(() => {console.log('销毁(卸载)完毕:', title.value)
})
</script>

5> 修改 Vue 根组件 src/App.vue,引用自定义功能组件,并在生命周期各阶段对应的 Hooks 函数中执行打印。

<template><div class="root"@click="changeColor":style="{ backgroundColor: color }"><h1>{{ title }}</h1><button @click="presence = !presence">隐藏/显示自定义功能组件</button><Demo v-if="presence" /></div>
</template><script setup lang="ts">
import Demo from './components/Demo.vue'
import { onBeforeMount, onBeforeUnmount, onBeforeUpdate, onMounted, onUnmounted, onUpdated, ref } from 'vue'const title = ref('App组件')
const color = ref('blue')
const presence = ref(true)function changeColor() {color.value = (color.value == 'blue') ? 'green' : 'blue'
}console.log('创建:', title.value)onBeforeMount(() => {console.log('挂载前:', title.value)
})onMounted(() => {console.log('挂载完毕:', title.value)
})onBeforeUpdate(() => {console.log('更新前:', title.value)
})onUpdated(() => {console.log('更新完毕:', title.value)
})onBeforeUnmount(() => {console.log('销毁(卸载)前:', title.value)
})onUnmounted(() => {console.log('销毁(卸载)完毕:', title.value)
})
</script><style scoped lang="scss">
.root {padding: 20px;
}
</style>

注意:需要执行 npm install -D sass 命令安装 CSS 预处理器。

6> 执行命令 npm run dev,浏览器访问 http://localhost:5173/,观察浏览器控制台中的日志打印。
启动日志
从日志中可以看出,先执行根组件 创建挂载前,在 根组件挂载过程中 执行子组件的 创建挂载,当子组件 挂载完毕 后才触发根组件 挂载完毕

7> 点击根组件 <div> 区域,注意不要点击到子组件的 <div> 区域,观察日志打印。
根组件更新日志
可见只触发了根组件 更新

8> 点击子组件的 <div> 区域,观察日志打印。
子组件更新日志
先触发子组件 更新,然后触发根组件 更新,因为默认 JS 事件冒泡。

9> 点击页面中 隐藏/显示自定义功能组件 按钮隐藏组件,观察日志打印。
隐藏组件日志
首先触发根组件 更新前,在 根组件更新过程中 触发子组件 销毁(卸载),然后触发根组件 更新完毕

10> 点击页面中 隐藏/显示自定义功能组件 按钮显示组件,观察日志打印。
显示组件日志
首先触发根组件 更新前,在 根组件更新过程中 触发子组件 创建挂载,子组件 挂载完毕 后触发根组件 更新完毕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/387259.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于vue2 + Ant Design 封装input(输入)下拉Table表格

封装 AInputTable 组件 <!--下拉Table--> <template><div class"input-select-table" ref"inputTableRef" v-clickoutside"handleHide"><div class"input-select-table-input" click"disabled?this:hand…

【信创】samba的命令行使用 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;【信创】samba的命令行使用 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在信创终端操作系统上使用Samba命令操作的文章。Samba是一种用于实现文件和打印共享的免费软件&#xff0c;它允许不同操作系统&#xf…

Android studio IDE 使用日志 2024/7/30

Android studio IDE 使用日志 时间:2024/7/30 11:10 配置 安装中文语言包,汉化操作界面:下载地址 根据版本信息下载 设置中选择安装插件,选择压缩包自动安装 项目的文件夹目录结构 .gradle :包含了Gradle构建系统,自动编译工具产生的文件 .idea :包含IDEA&#xff08;‌A…

UDP程序设计

UDP协议概述 UDP&#xff0c;User Datagram Protocol&#xff0c;用户数据报协议&#xff0c;是一个简单的面向数据报(package-oriented)的传输层协议&#xff0c;规范为&#xff1a;RFC 768。 UDP提供数据的不可靠传递&#xff0c;它一旦把应用程序发给网络层的数据发送出去…

设计模式16-代理模式

设计模式16-代理模式 动机定义与结构模式定义结构 代码推导特点应用总结实例说明1. 远程代理2. 虚拟代理3. 保护代理4. 智能引用代理 动机 在面向对象系统中有一些对象由于某种原因比如对象创建的开销很大或者某些操作需要安全控制&#xff0c;或者需要进程外的访问等情况。直…

Java面试八股之Spring如何解决循环依赖

Spring如何解决循环依赖 在Spring框架中&#xff0c;循环依赖问题通常发生在两个或多个Bean相互依赖的情况下。Spring为了解决循环依赖问题&#xff0c;采用了不同的策略&#xff0c;这些策略主要取决于Bean的作用域以及依赖注入的方式。下面是一些关键点&#xff1a; 单例Be…

centos安装python 3.9

centos安装python 3.9 1. 准备工作 安装必要的构建工具和依赖项&#xff1a; sudo yum groupinstall "Development Tools" sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel …

轻量级服务器资源监控平台Beszel

什么是 Beszel &#xff1f; Beszel 是一个轻量级平台&#xff0c;借助 Beszel&#xff0c;可以访问 CPU 和内存使用情况的历史数据&#xff0c;以及 Docker 容器指标&#xff08;例如特定于容器的 CPU 和内存统计信息&#xff09;。还能收到针对潜在问题的可自定义警报通知&am…

【Golang 面试 - 进阶题】每日 3 题(八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

基于Django与spark的国漫推荐系统

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 近年来&#xff0c;随着互联网的蓬勃发展&#xff0c;企事业单位对信息的管理提…

C#知识|文件与目录操作:对象的创建、保存、读取

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 面向对象编程的特点就是一切皆对象&#xff0c;操作的也是对象&#xff0c;本节学习文件与目录操作中&#xff0c;对象的保存&#xff1b; 以下为学习笔记。 01 对象的特点 ①&#xff1a;对象运行在内存中&#xff…

二刷代码随想录训练营Day 11| 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素、总结

1.逆波兰表达式 题目链接/文章讲解/视频讲解&#xff1a;代码随想录 代码&#xff1a; class Solution { public:int evalRPN(vector<string>& tokens) {stack<long long> st;for(int i 0; i < tokens.size(); i){if(tokens[i] "" || tokens[i…

vue里给img的src绑定数据失效

起因 在v-for遍历数据时想要通过给img的src单向绑定 图片路径时出现问题 解决过程 上网查说是webpack构建时识别不到&#xff0c;直接不单绑数据&#xff0c;写死试试看 解决方案 直接require导入图像文件模块

热门超声波清洗机有哪些?小型超声波清洗机推荐

在繁忙的工作和生活中&#xff0c;许多人常常会因为种种原因忽略日常的小事&#xff0c;比如忘记清洁手表、眼镜、首饰等常用物品。实际上&#xff0c;这些物品表面不仅积累了灰尘和污垢&#xff0c;特别是跟眼部朝夕相处的眼镜&#xff0c;还可能滋生各种致病细菌&#xff0c;…

【数据分享】《内蒙古省统计年鉴》2000-2023

而今天要限时免费分享的数据就是2000-2023年间出版的《内蒙古省统计年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 位于中国北部的内蒙古自治区&#xff0c;以其独特的地理和文化特性&#xff0c;成为中国经济发展的重要组成部…

京东科技集团将在香港发行与港元1:1挂钩的加密货币稳定币

据京东科技集团旗下公司京东币链科技(香港)官网信息&#xff0c;京东稳定币是一种基于公链并与港元(HKD) 1:1挂钩的稳定币&#xff0c;将在公共区块链上发行&#xff0c;其储备由高度流动且可信的资产组成&#xff0c;这些资产安全存放于持牌金融机构的独立账户中&#xff0c;通…

工具(1)—截屏和贴图工具snipaste

演示和写代码文档的时候&#xff0c;总是需要用到截图。在之前的流程里面&#xff0c;一般是打开WX或者QQ&#xff0c;找到截图工具。但是尴尬的是&#xff0c;有时候&#xff0c;微信没登录&#xff0c;而你这个时候就在写文档。为了截个图&#xff0c;还需要启动微信&#xf…

数据透视表(二)

文章目录 导入外部数据源创建数据透视表Query 工具下的数据透视表创建如何统计业绩成交情况创建组利用函数构建辅助列创建组手动创建多样分组创建组区间统计创建组按年月日统计数据透视表的多种统计方法计算字段 导入外部数据源创建数据透视表 点击数据选项卡下数据-获取外部数…

环境搭建-Windows系统搭建Docker

Windows系统搭建Docker 一、系统虚拟化1.1 启用虚拟化2.2 启用Hyper-v并开启虚拟任务 三、安装WSL3.1 检验安装3.2 安装WSL 四、Docker安装4.1 Docker安装包下载4.2 Docker安装4.3 运行docker Desktop 五、Docker配置5.1 打开Docker配置中心5.2 配置Docker国内镜像 六、使用 一…

马斯克的Memphis AI超级计算中心:全球最强AI训练集群的诞生

引言 近期&#xff0c;马斯克宣布其最新的Memphis AI超级计算中心正式启动&#xff0c;这一新闻引发了科技界的广泛关注。该中心配备了10万块液冷H100 GPU&#xff0c;成为全球最强大的AI训练集群。本文将深入探讨Memphis AI超级计算中心的建设过程、技术细节、以及其对未来人…