第VI章-Ⅰ Vue3生命周期探讨

news/2025/1/18 9:02:20/

第VI章-Ⅰ Vue3生命周期探讨

  • 简介
  • Vue3生命周期概览
  • 生命周期钩子在选项式 API 中的使用
    • 错误捕获钩子 onErrorCaptured
  • 生命周期钩子在组合式 API 中的使用
    • 错误捕获钩子 onErrorCaptured
  • 总结

简介

在 Vue 3 中,生命周期钩子定义了组件在其创建、挂载、更新和销毁等过程中会执行的操作。这些钩子允许开发者在组件不同的阶段执行特定的代码逻辑。以下是 Vue 3 生命周期钩子的详细解释,以及如何在选项式 API 和组合式 API 中分别使用它们。

Vue3生命周期概览

  • beforeCreate:实例初始化之后,数据观测和事件配置之前。
  • created:实例创建完成,已经配置好数据观测、计算属性和方法,但尚未挂载 DOM。
  • beforeMount:在挂载之前被调用,在 render 函数首次被调用之前。
  • mounted:实例挂载完成,DOM 已经可访问。
  • beforeUpdate:在数据更新导致虚拟 DOM 重新渲染前被调用。
  • updated:数据更新导致虚拟 DOM 更新并重新渲染完成后调用。
  • beforeUnmount:实例被卸载之前调用。
  • unmounted:实例被卸载之后调用。
  • errorCaptured:当捕获一个来自子组件的错误时调用。

生命周期钩子在选项式 API 中的使用

选项式 API 中,生命周期钩子直接在组件对象上定义。

<template><div><h2>选项 API</h2><p>{{ message }}</p><button @click="updateMessage">Update Message</button></div>
</template><script>
export default {data() {return {message: 'Hello, Vue 3!'};},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: 卸载完成');},methods: {updateMessage() {this.message = 'Message Updated!';}}
};
</script>

错误捕获钩子 onErrorCaptured

<template><div><h2>选项 API 错误捕获</h2><p v-if="errorMessage">{{ errorMessage }}</p><button @click="throwError">Throw Error</button></div>
</template><script>
export default {data() {return {errorMessage: ''};},methods: {throwError() {throw new Error('Test Error from Button');}},errorCaptured(err, instance, info) {this.errorMessage = `Error: ${err.message}`;console.log('Captured error:', err, 'In instance:', instance, 'Info:', info);return false; // 返回 false 会继续传播这个错误}
};
</script>

生命周期钩子在组合式 API 中的使用

组合式 API 中,生命周期钩子作为 Vue 中的导入函数,在 setup 函数中调用。

<template><div><h2>组合 API</h2><p>{{ message }}</p><button @click="updateMessage">Update Message</button></div>
</template><script setup lang="ts">
import { ref, onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted } from 'vue';// 数据
const message = ref('Hello, Vue 3!');// 更新函数
const updateMessage = () => {message.value = 'Message Updated!';
};// 生命周期钩子
onBeforeMount(() => {console.log('onBeforeMount: 挂载之前');
});onMounted(() => {console.log('onMounted: 挂载完成');
});onBeforeUpdate(() => {console.log('onBeforeUpdate: 更新之前');
});onUpdated(() => {console.log('onUpdated: 更新完成');
});onBeforeUnmount(() => {console.log('onBeforeUnmount: 卸载之前');
});onUnmounted(() => {console.log('onUnmounted: 卸载完成');
});
</script>

错误捕获钩子 onErrorCaptured

import { ref, onMounted, onErrorCaptured } from 'vue';const errorMessage = ref('');onMounted(() => {// 模拟产生错误throw new Error('Test Error');
});onErrorCaptured((err, instance, info) => {errorMessage.value = `Error: ${err.message}`;console.log('Captured error:', err, 'In instance:', instance, 'Info:', info);return false; // 返回 false 会继续传播这个错误
});

总结

Vue 3 的生命周期钩子在选项式 API 和组合式 API 中都提供了强大的功能:

  • 选项式 API:生命周期钩子直接在组件对象上定义。
  • 组合式 API:生命周期钩子作为函数引入,并在 setup 函数中调用。

http://www.ppmy.cn/news/1458667.html

相关文章

Linux学习笔记(3)---- Debian测试网速指令及查看是否千兆网卡

测试网速指令 在Debian系统中&#xff0c;测网速的指令主要有以下几种方法&#xff1a; 使用speedtest-cli工具&#xff1a; speedtest-cli是一个常用的网络速度测试工具&#xff0c;可以通过命令行进行安装和运行。首先&#xff0c;需要安装speedtest-cli&#xff1a; sud…

FANUC机器人故障诊断—报警代码(五)

FANUC机器人故障诊断中关于报警代码的介绍更新如下&#xff1a; 一、报警代码&#xff08;SRVO-214&#xff09; SRVO-214 6轴放大器保险丝熔断 [原因]6轴伺服放大器上的保险丝(FS2,FS3)已熔断。括号内的数字表示在第几台6轴伺服放大器上检测出了保险丝熔断。 [对策] 1.保险…

计算机组成原理网课笔记

无符号整数的表示与运算 带符号整数的表示与运算 原反补码的特性对比 移码 定点小数

springboot+vue实现登录注册,短信注册以及微信扫描登录

说明&#xff1a;微信扫描登录需要微信注册--要钱&#xff0c;感谢尚硅谷提供的免费接口&#xff1b;短信注册需要阿里云的注册很麻烦并且短信费&#xff0c;没有接口&#xff0c;所以不打算实现&#xff0c;不过能做出效果。 目录 一、建立数据库 二、后端idea实现接口 1.…

2024.5.9

闹钟 widget.h头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> #include <QTimer> #include <QTimerEvent> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclas…

车载测试到底怎么样?真实揭秘!

什么是车载智能系统测试&#xff1f; 车载智能系统&#xff0c;是汽车智能化重要的组成部分&#xff0c;由旧有的车载资通讯系统结合联网汽车技术所演进而来&#xff0c;随着软硬件技术的不断进步&#xff0c; 让车载智能系统拥有强大的运算能力及多元化的应用功能。 车载智能…

韩顺平0基础学Java——第4天

p45—p71 老天鹅&#xff0c;居然能中断这么久&#xff0c;唉...学不完了要 API API:application programing interface应用程序编程接口 www.matools.com 可以理解成Python的调包...c的头文件对吧 字符型 char用单引号 String用双引号 char本质上是个整数&#xff0c…

太阳能风吸式杀虫灯-农业设备科普

TH-FD2S太阳能风吸式杀虫灯是一种高效、环保的灭虫设备&#xff0c;它结合了太阳能技术和风吸式杀虫技术&#xff0c;为农业、林业、仓储、鱼塘等多个领域提供了有效的害虫防治手段。 太阳能风吸式杀虫灯的工作原理相对简单而高效。首先&#xff0c;它通过太阳能电池板在白天储…