六十天前端强化训练之第二十五天之组件生命周期大师级详解(Vue3 Composition API 版)

=====欢迎来到编程星辰海的博客讲解======

看完可以给一个免费的三连吗,谢谢大佬!

 

目录

一、生命周期核心知识

1.1 生命周期全景图

1.2 生命周期钩子详解

1.2.1 初始化阶段

1.2.2 挂载阶段

1.2.3 更新阶段

1.2.4 卸载阶段

1.3 生命周期执行顺序

1.4 父子组件生命周期顺序

二、核心代码示例(带详细注释)

三、实现效果说明

四、学习要点总结

4.1 必须掌握的核心知识

4.2 最佳实践技巧

4.3 常见误区警示

五、扩展阅读推荐

5.1 官方文档

5.2 优质文章

5.3 推荐工具库

六、深度思考题


一、生命周期核心知识

1.1 生命周期全景图

组件生命周期指的是组件从创建到销毁的完整过程,理解生命周期可以帮助我们在正确的时间执行特定逻辑。Vue3的生命周期分为以下阶段:

TEXT

初始化 → 挂载 → 更新 → 卸载

1.2 生命周期钩子详解

1.2.1 初始化阶段
  • setup():Composition API的入口函数,替代Vue2的beforeCreatecreated
  • onBeforeMount:DOM挂载前触发,此时模板已经编译完成
1.2.2 挂载阶段
  • onMounted:DOM挂载完成后触发,此时可以访问DOM元素
  • 典型应用:数据请求、DOM操作、定时器启动
1.2.3 更新阶段
  • onBeforeUpdate:数据变化导致DOM更新前触发
  • onUpdated:DOM更新完成后触发
1.2.4 卸载阶段
  • onBeforeUnmount:组件实例销毁前触发
  • onUnmounted:组件实例销毁后触发
  • 典型应用:清除定时器、取消事件监听、释放内存

1.3 生命周期执行顺序

单组件完整流程示例:

JAVASCRIPT

setup()
onBeforeMount()
onMounted()
// 数据更新时
onBeforeUpdate()
onUpdated()
// 组件销毁时
onBeforeUnmount()
onUnmounted()

1.4 父子组件生命周期顺序

父子组件嵌套时的执行顺序:

TEXT

父beforeMount → 子setup → 子beforeMount → 子mounted → 父mounted

二、核心代码示例(带详细注释)

HTML

<template><div><h1>用户数据列表</h1><div v-if="loading">加载中...</div><div v-else-if="error" class="error">{{ error }}</div><ul v-else><li v-for="user in users" :key="user.id">{{ user.name }} - {{ user.email }}</li></ul></div>
</template><script>
import { ref, onMounted } from 'vue';export default {setup() {// 使用ref创建响应式数据const users = ref([]);const loading = ref(true);const error = ref(null);// 定义异步获取数据的方法const fetchData = async () => {try {// 模拟API调用,1秒后返回数据const response = await new Promise(resolve => {setTimeout(() => {resolve({data: [{ id: 1, name: '张三', email: 'zhangsan@example.com' },{ id: 2, name: '李四', email: 'lisi@example.com' }]});}, 1000);});users.value = response.data;} catch (err) {error.value = '数据加载失败: ' + err.message;} finally {loading.value = false;}};// 在挂载阶段执行数据获取onMounted(() => {console.log('组件已挂载,开始获取数据...');fetchData();// 可以在此处访问DOM元素const titleElement = document.querySelector('h1');if (titleElement) {console.log('标题元素内容:', titleElement.textContent);}});return {users,loading,error};}
};
</script><style>
.error {color: red;font-weight: bold;
}
</style>

三、实现效果说明

  1. 组件挂载时显示"加载中..."
  2. 1秒后显示用户列表
  3. 控制台输出:

    TEXT

    组件已挂载,开始获取数据...
    标题元素内容: 用户数据列表
    

效果呈现:

  • 初始状态 → 加载状态 → 成功显示数据
  • 网络错误时显示红色错误提示
  • 精准的生命周期时机把握

四、学习要点总结

4.1 必须掌握的核心知识

  1. onMounted是发起异步请求的最佳时机
  2. 避免在onMounted中执行同步阻塞操作
  3. 及时在onUnmounted中清理副作用
  4. onUpdated使用时要注意避免无限循环

4.2 最佳实践技巧

  • 数据请求要配合加载状态和错误处理
  • 使用try/catch处理异步操作错误
  • onMounted中访问DOM需确保元素存在
  • 复杂组件建议使用onScopeDispose管理副作用

4.3 常见误区警示

  1. setup中直接进行DOM操作(此时DOM尚未渲染)
  2. 忘记处理异步操作的加载和错误状态
  3. onUpdated中修改响应式数据导致循环更新
  4. 未在卸载时清理定时器/事件监听器导致内存泄漏

五、扩展阅读推荐

5.1 官方文档

  1. Vue3 生命周期文档
  2. 组合式API深入指南
  3. 响应性原理详解

5.2 优质文章

  1. Vue3生命周期最佳实践
  2. 异步组件加载策略
  3. 大型应用状态管理指南
  4. Vue3性能优化全攻略

5.3 推荐工具库

  1. VueUse - 常用组合式API工具集
  2. Pinia - 新一代状态管理库
  3. Vite - 新一代构建工具

六、深度思考题

  1. 如果在onMounted中设置的定时器没有在onUnmounted中清除,会导致什么问题?
  2. 服务端渲染(SSR)场景下生命周期有何不同?
  3. 如何测试组件生命周期的正确执行顺序?
  4. onMountedwatchEffect的执行顺序是怎样的?

通过系统学习生命周期知识,开发者可以精准掌控组件行为,写出更健壮、可维护的Vue应用。建议结合官方文档和实际项目进行实践,加深理解。

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

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

相关文章

Burp Suite 代理配置与网络通信

目录 1. 引言 2. Burp 代理基础配置 2.1 浏览器代理设置 2.2 Burp 监听端口配置 2.3 常见错误排查 3. 网络问题解决 3.1 端口占用检查 3.2 防火墙配置 3.3 证书信任问题 4. 虚拟机环境配置 4.1 NAT 模式与端口转发 4.2 桥接模式配置 4.3 跨设备访问测试 5. 技术概…

numpy学习笔记16: 1000 次独立随机游走实验(绘制其分布直方图,同时叠加理论正态分布曲线)

numpy学习笔记16&#xff1a; 1000 次独立随机游走实验(绘制其分布直方图&#xff0c;同时叠加理论正态分布曲线) 以下是这段代码(全部代码在最后)的详细分步解释&#xff0c;结合统计学原理和可视化技巧&#xff1a; 1. 代码功能概述 这段代码通过 1000 次独立随机游走实验&…

C# 项目06-计算程序运行时间

实现需求 记录程序运行时间&#xff0c;当程序退出后&#xff0c;保存程序运行时间&#xff0c;等下次程序再次启动时&#xff0c;继续记录运行时间 运行环境 Visual Studio 2022 知识点 TimeSpan 表示时间间隔。两个日期之间的差异的 TimeSpan 对象 TimeSpan P_TimeSpa…

KNN算法

一、KNN算法介绍 KNN 算法&#xff0c;也称 k邻近算法&#xff0c;是 有监督学习 中的 分类算法 。它可以用于分类或回归问题&#xff0c;但它通常用作分类算法。 二、KNN算法流程 1.计算已知类别数据集中的点与当前点的距离 2.按照距离增次序排序 3.选取与当前点距离最小…

星越L_可调悬挂使用讲解

目录 1.可变阻尼设置 1.可变阻尼设置

G-Star 校园开发者计划·黑科大|开源第一课之 Git 入门

万事开源先修 Git。Git 是当下主流的分布式版本控制工具&#xff0c;在软件开发、文档管理等方面用处极大。它能自动记录文件改动&#xff0c;简化合并流程&#xff0c;还特别适合多人协作开发。学会 Git&#xff0c;就相当于掌握了一把通往开源世界的钥匙&#xff0c;以后参与…

html5炫酷3D立体文字效果实现详解

炫酷3D立体文字效果实现详解 这里写目录标题 炫酷3D立体文字效果实现详解项目概述技术实现要点1. 基础布局设置2. 动态背景效果3. 文字渐变效果4. 立体阴影效果5. 悬浮动画效果 技术难点及解决方案1. 文字渐变动画2. 立体阴影效果3. 性能优化 浏览器兼容性总结 项目概述 在这个…

《白帽子讲 Web 安全》之开发语言安全深度解读

目录 引言 1.PHP 安全 1.1变量覆盖 1.2空字节问题 1.3弱类型 1.4反序列化 1.5安全配置 2Java 安全 2.1Security Manager 2.2反射 2.3反序列化 3Python 安全 3.1反序列化 3.2代码保护 4.JavaScript 安全 4.1第三方 JavaScript 资源 4.2JavaScript 框架 5.Node.…

django设置admin的排列顺序,耗3小时【躲坑指南】

django 项目中&#xff0c;这个数据栏目的显示排列顺序我希望更贴近业务 比如要让【商品货品信息】中的9个数据表根据人为规定来进行排序 结果&#xff1a;工程量很大。 能够实现人为的自定义排序 最简单的设置就是给模型添加号数标记 主应用中创建admin–设置了其中一个应用…

macOS使用brew切换Python版本【超详细图解】

目录 一、更新Homebrew仓库 二、安装pyenv 三、将pyenv添加到bash_profile文件中 四、使.bash_profile文件的更改生效 五、安装需要的Python版本 六、设置全局使用的Python版本 七、检查Python版本是否切换成功 pyenv常用命令 一、更新Homebrew仓库 brew update 这个…

【深度学习新浪潮】AI ISP技术与手机厂商演进历史

本文是关于AI ISP(人工智能图像信号处理器)的技术解析、与传统ISP(图像信号处理器)的区别、近三年研究进展,以及各大手机厂商在该领域演进历史的详细报告。本报告综合多个权威来源的信息,力求全面、深入地呈现相关技术发展脉络与行业动态。 第一部分:AI ISP的定义及与传…

如何让节卡机器人精准对点?

如何让节卡机器人精准对点&#xff1f; JAKA Zu 软件主界面主要由功能栏、开关栏、菜单栏构成。 菜单栏&#xff1a;控制柜管理&#xff0c;机器人管理与软件管理组成。主要功能为对控制柜关机、APP 设置、机器人本体设 置、控制柜设置、连接机器人和机器人显示等功能。 开关…

QAI AppBuilder 快速上手(7):目标检测应用实例

YOLOv8_det是YOLO 系列目标检测模型&#xff0c;专为高效、准确地检测图像中的物体而设计。该模型通过引入新的功能和改进点&#xff0c;如因式分解卷积&#xff08;factorized convolutions&#xff09;和批量归一化&#xff08;batch normalization&#xff09;&#xff0c;在…

c#难点整理

1.何为托管代码&#xff0c;何为非托管代码 托管代码就是.net框架下的代码 非托管代码&#xff0c;就是非.net框架下的代码 2.委托的关键知识点 将方法作为参数进行传递 3.多维数组 4.锯齿数组 5.多播委托的使用 6.is运算符 相当于逻辑运算符是 7.as 起到转换的作用 8.可…

二次向用户申请授权

HarmonyOS 5.0.3(15) 版本的配套文档&#xff0c;该版本API能力级别为API 15 Release 文章目录 当应用通过requestPermissionsFromUser()拉起弹框请求用户授权时&#xff0c;用户拒绝授权。应用将无法再次通过requestPermissionsFromUser()拉起弹框&#xff0c;需要用户在系统应…

JetsonNano —— 4、Windows下对JetsonNano板卡烧录刷机Ubuntu20.04版本(官方教程)

介绍 NVIDIA Jetson Nano™ 开发者套件是一款面向创客、学习者和开发人员的小型 AI 计算机。按照这个简短的指南&#xff0c;你就可以开始构建实用的 AI 应用程序、酷炫的 AI 机器人等了。 烧录刷机 1、下载 Jetson Nano开发者套件SD卡映像 解压出.img文件并记下它在计算机上的…

Chapter 8 Charge Pump

Chapter 8 Charge Pump 8.1 Introduction 电荷泵就是capacitive DC–DC converters, 一般把小功率bias generation叫做电荷泵, 传输大功率的称为switched-capacitor DC–DC converters. 但其实两者都是通过电容网络的charge redistribution, 来实现电压的倍增或者倍降. 8.1.…

计算机网络——通信基础和传输介质

物理层任务&#xff1a;实现相邻节点之间比特&#xff08;0或1&#xff09;的传输 到了数据链路层之后&#xff0c;它会以帧为单位&#xff0c;把若干个比特交给物理层&#xff0c;物理层需要把这些比特信息转化成信号&#xff0c;在物理传输媒体上进行传输 通信基础基本概念 信…

【架构】单体架构 vs 微服务架构:如何选择最适合你的技术方案?

文章目录 ⭐前言⭐一、架构设计的本质差异&#x1f31f;1、代码与数据结构的对比&#x1f31f;2、技术栈的灵活性 ⭐二、开发与维护的成本博弈&#x1f31f;1、开发效率的阶段性差异&#x1f31f;2、维护成本的隐形陷阱 ⭐三、部署与扩展的实战策略&#x1f31f;1、部署模式的本…

Java-SpringBootWeb入门、Spring官方脚手架连接不上解决方法

一. Spring 官网&#xff1a;Spring | Home Spring发展到今天已经形成了一种开发生态圈&#xff0c;Spring提供了若干个子项目&#xff0c;每个项目用于完成特定的功能(Spring全家桶) Spring Boot可以帮助我们非常快速的构建应用程序、简化开发、提高效率 。 二. Spring Boot入…