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

news2025/3/23 17:54:44

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

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

 

目录

一、生命周期核心知识

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.coloradmin.cn/o/2319369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot整合mybatis-plus(保姆教学) 及搭建项目

一、Spring整合MyBatis (1)将MyBatis的DataSource交给Spring IoC容器创建并管理&#xff0c;使用第三方数据库连接池(Druid&#xff0c;C3P0等)代替MyBatis内置的数据库连接池 (2)将MyBatis的SqlSessionFactory交给Spring IoC容器创建并管理&#xff0c;使用spring-mybatis整…

VSCode创建VUE项目(三)使用axios调用后台服务

1. 安装axios,执行命令 npm install axios 2. 在 main.ts 中引入并全局挂载 Axios 实例 修改后的 代码&#xff08;也可以单独建一个页面处理Axios相关信息等&#xff0c;然后全局进行挂载&#xff09; import { createApp } from vue import App from ./App.vue import rou…

车辆模型——运动学模型

文章目录 约束及系统移动机器人运动学模型&#xff08;Kinematic Model&#xff09;自行车模型含有加速度 a a a 的自行车模型系统偏差模型 在机器人的研究领域中&#xff0c;移动机器人的系统建模与分析是极为关键的基础环节&#xff0c;本文以非完整约束的轮式移动机器人为研…

【STM32实物】基于STM32的太阳能充电宝设计

基于STM32的太阳能充电宝设计 演示视频: 基于STM32的太阳能充电宝设计 硬件组成: 系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。 功能…

24-智慧旅游系统(协同过滤算法)

介绍 技术&#xff1a; 基于 B/S 架构 SpringBootMySQLLayuivue 环境&#xff1a; Idea mysql maven jdk1.8 管理端功能 管理端主要用于对系统内的各类旅游资源进行管理&#xff0c;包括用户信息、旅游路线、车票、景点、酒店、美食、论坛等内容。具体功能如下&#xff1a; …

Vue 中的日期格式化实践:从原生 Date 到可视化展示!!!

&#x1f4c5; Vue 中的日期格式化实践&#xff1a;从原生 Date 到可视化展示 &#x1f680; 在数据可视化场景中&#xff0c;日期时间的格式化显示是一个高频需求。本文将以一个邀请码关系树组件为例&#xff0c;深入解析 Vue 中日期格式化的 核心方法、性能优化 和 最佳实践…

2025年使用Scrapy和Playwright解决网页抓取挑战的方案

0. 引言 随着互联网技术的发展&#xff0c;网页内容呈现方式越来越复杂&#xff0c;大量网站使用JavaScript动态渲染内容&#xff0c;这给传统的网络爬虫带来了巨大挑战。在2025年的网络爬虫领域&#xff0c;Scrapy和Playwright的结合为我们提供了一个强大的解决方案&#xff…

可靠消息投递demo

以下是一个基于 Spring Boot RocketMQ 的完整分布式事务实战 Demo&#xff0c;包含事务消息、本地事务、自动重试、死信队列&#xff08;DLQ&#xff09; 等核心机制。代码已充分注释&#xff0c;可直接运行。 一、项目结构 src/main/java ├── com.example.rocketmq │ …

Copilot提示词库用法:调整自己想要的,记住常用的,分享该共用的

不论你是 Microsoft 365 Copilot 的新用户还是熟练运用的老鸟&#xff0c;不论你是使用copilot chat&#xff0c;还是在office365中使用copilot&#xff0c;copilot提示词库都将帮助你充分使用copilot这一划时代的产品。它不仅可以帮助你记住日常工作中常用的prompt提示词&…

Python实战(3)-数据库操作

前面说过&#xff0c;可用的SQL数据库引擎有很多&#xff0c;它们都有相应的Python模块。这些数据库引擎大都作为服务器程序运行&#xff0c;连安装都需要有管理员权限。为降低Python DB API的使用门槛&#xff0c;我选择了一个名为SQLite的小型数据库引擎。它不需要作为独立的…

LeetCode 160 Intersection Of Two Linked Lists 相交链表 Java

题目&#xff1a;找到两个相交列表的起始点&#xff0c;如图c1开始为A和B两个链表的相交点 举例1&#xff1a;8为两个链表的相交点。 注意&#xff1a;相交不止是数值上的相同。 举例2&#xff1a;2为相交点 举例3&#xff1a;没有相交点 解题思路&#xff1a; 相交证明最后一…

AI Agent中的MCP详解

一、协议定义与核心价值 MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年11月推出的开放标准协议,其核心目标是通过建立统一接口规范,解决AI模型与外部系统集成效率低下的行业痛点。该协议通过标准化通信机制,使大型语言模型(LLM)能够无缝对接数…

win系统上自动化安装配置WSL linux和各种生信工具教程

windows系统上自动化安装配置WSL linux系统和各种生信工具教程 高通量测序原始数据的上游分析模块介绍 我开发的OmicsTools软件的这些分析测序原始数据的上游处理分析模块需要使用到linux和linux系统中的一些生信工具&#xff0c;在这里我开发了在windows系统中自动化安装WSL …

PowerBI纯小白如何驾驭DAX公式一键生成:copilot for fabric

在2025年2月份更新中&#xff0c;powerbi desktop里的copilot功能还新增了一个非常强大的功能&#xff1a;一键生成多个度量值&#xff0c;并直接加载到模型。 直接上示例展示&#xff1a; 打开DAX查询视图&#xff0c;在copilot窗格中直接输入想要生成多个度量值&#xff0c…

两市总的净流出和净流入来分析情况

为了排查数据干扰&#xff0c;只从两市总的净流出和净流入来分析情况。 净流出才对应资金抽离&#xff1a;若净流入为负&#xff08;即净流出&#xff09;&#xff0c;则意味着资金从股市中撤出&#xff0c;例如主动卖出的金额超过主动买入金额。净流入反映市场信心&#xff1…

如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析

文章目录 聚合函数group by子句的使用实战OJ日期函数字符串函数数学函数其它函数 聚合函数 函数说明COUNT([DISTINCT] expr)返回查询到的数据的 数量SUM([DISTINCT] expr)返回查询到的数据的 总和&#xff0c;不是数字没有意义AVG([DISTINCT] expr)返回查询到的数据的 平均值&…

k8s-coredns-CrashLoopBackOff 工作不正常

本文作者&#xff1a; slience_me 问题描述 # 问题描述 # rootk8s-node1:/home/slienceme# kubectl get pods --all-namespaces # NAMESPACE NAME READY STATUS RESTARTS AGE # kube-flannel kube-flannel-ds-66bcs …

【Android性能】Systrace分析

1&#xff0c;分析工具 1&#xff0c;Systrace新UI网站 Perfetto UI 2&#xff0c;Systrace抓取 可通过android sdk中自带的systrace抓取&#xff0c;路径一般如下&#xff0c;..\AppData\Local\Android\Sdk\platform-tools&#xff0c; 另外需要安装python2.7&#xff0c;…

Unity导出WebGL,无法显示中文

问题&#xff1a;中文无法显示 默认字体无法显示中文 在编辑器中设置了中文和英文的按钮&#xff0c;中文按钮无法显示 导出后无法显示中文 解决办法&#xff1a; 自己添加字体&#xff0c;导入项目&#xff0c;并引用 示例 下载一个字体文件&#xff0c;这里使用的阿里…

oracle事务的组成

1)数据库事务由以下的部分组成: 一个或多个DML 语句 ; 一个 DDL(Data Definition Language – 数据定义语言) 语句&#xff1b; 一个 DCL(Data Control Language – 数据控制语言)语句&#xff1b; 2)事务的执行开始&#xff1a; 以第一个 DML 语句的执行作为开始 &#xff0c;…