当前位置: 首页 > news >正文

vue3从精通到入门12:vue3的生命周期和组件

生命周期:

生命周期钩子主要包括:

  1. beforeCreate:组件实例被创建之前调用。在这个阶段,组件的 props 和 data 还未被初始化。
  2. created:组件实例创建完成后调用。在这个阶段,组件的 props 和 data 已经被初始化,但 DOM 还未挂载。
  3. beforeMount:组件的模板编译和虚拟 DOM 已经创建,但尚未挂载到真实 DOM 上。
  4. mounted:组件已经挂载到真实 DOM 上,可以访问和操作 DOM 元素。
  5. beforeUpdate:组件的响应式数据发生变化,但尚未重新渲染和更新 DOM。
  6. updated:组件已经重新渲染和更新 DOM。
  7. beforeUnmount:组件实例被销毁之前调用。在这个阶段,组件仍然完全可用。
  8. unmounted:组件实例已经被销毁,组件的所有功能都已失效。

初始化阶段

setup

这是 vue 3 引入的新生命周期钩子,在 beforeCreate 和 created 钩子之前调用。setup 函数接收两个参数:props 和 context(包含 attrsslotsemit 等)。在 setup 中,你可以使用 ref 和 reactive 来创建响应式状态,并且可以直接访问组件的 props

beforeCreate

在组件实例创建之前调用。此时,组件的 props 和 data 还未被观察和初始化。在 setup 钩子之后调用。

created

组件实例创建完成后调用。在这个阶段,组件的 props 和 data 已经被观察和初始化,但 DOM 还未挂载。可以在这里执行一些不需要 DOM 的初始化操作。

挂载阶段

beforeMount

在组件的模板编译和虚拟 DOM 已经创建,但尚未挂载到真实 DOM 上之前调用。

mounted

组件已经挂载到真实 DOM 上,可以访问和操作 DOM 元素。通常在这里执行一些初始的 DOM 操作或第三方库的初始化。

更新阶段

beforeUpdate

组件的响应式数据发生变化,但尚未重新渲染和更新 DOM 之前调用。可以在这里访问组件更新前的状态。

updated

组件已经重新渲染和更新 DOM 之后调用。当需要基于新的 DOM 状态执行操作时,可以在这里进行。

卸载阶段

beforeUnmount

组件实例被销毁之前调用。在这个阶段,组件仍然完全可用,但即将被卸载。可以在这里执行一些清理操作,如取消计时器、移除事件监听器等。

unmounted

组件实例已经被销毁,组件的所有功能都已失效。在这个阶段,无法再访问组件实例或任何其状态。

错误处理

errorCaptured

当组件或其后代组件发生错误时调用。这个钩子可以用于错误处理和报告。

注意事项

  • 在 Vue 3 中,beforeDestroy 和 destroyed 钩子已被重命名为 beforeUnmount 和 unmounted
  • setup 钩子在组件的 beforeCreate 和 created 生命周期钩子之间执行,因此它提供了一个更早的时机来设置响应式状态和执行其他初始化逻辑。
  • 由于 setup 函数在 beforeCreate 和 created 之前调用,因此你不能在 setup 中访问 this,因为组件实例尚未创建。
<template>  <div>  <p>{{ message }}</p>  <button @click="changeMessage">Change Message</button>  </div>  
</template>  <script setup>  
import { ref, onMounted, onBeforeUnmount } from 'vue';  const message = ref('Hello, Vue 3!');  
let count = ref(0);  function changeMessage() {  message.value = `Message changed ${++count.value} times!`;  
}  onMounted(() => {  console.log('Component mounted!');  // 执行一些需要在组件挂载后执行的代码  
});  onBeforeUnmount(() => {  console.log('Component about to be unmounted!');  // 执行一些需要在组件卸载前执行的清理操作  
});  
</script>

组件:

创建组件

<template>  <div>  <p>Count: {{ count }}</p>  <button @click="increment">Increment</button>  </div>  
</template>  <script setup lang="ts">  
import { ref } from 'vue';  // 定义一个响应式引用  
const count = ref(0);  // 定义一个方法  
function increment() {  count.value++;  
}  // 可以直接将变量和方法暴露给模板  
// 它们会在模板中自动变得可用  
</script>  <style scoped>  
/* 组件样式 */  
</style>

响应式数据和方法

  • name 和 age 是使用 ref 创建的响应式引用,它们分别存储用户的姓名和年龄。
  • incrementAge 是一个方法,用于增加用户的年龄。

计算属性

  • title 是一个计算属性,它基于 name 的值动态生成标题。

Props

  • UserProps 是一个 TypeScript 接口,定义了组件接受的 props 的类型。
  • defineProps 用于声明组件的 props,并根据 UserProps 接口进行类型检查。
  • 在 onMounted 生命周期钩子中,我们根据传入的 props 初始化 name 和 age 的值。

模板

  • 在模板中,我们直接使用了在 <script setup> 中定义的 titlenameage 和 incrementAge。由于 <script setup> 的语法,这些变量和方法在模板中自动可用。

相关文章:

  • 蓝桥杯备考随手记: Scanner 类中常用方法
  • 竞赛常考的知识点大总结(五)动态规划
  • 【电源专题】电池均衡算法和均衡方式
  • 关于C#操作SQLite数据库的一些函数封装
  • keycloak - 鉴权VUE
  • 【Linux实践室】Linux高级用户管理实战指南:创建与删除用户组操作详解
  • JavaWeb前端基础(HTML CSS JavaScript)
  • acwing算法提高之图论--SPFA找负环
  • K8S基于containerd做容器从harbor拉取镜
  • 【Effective C++】41 了解隐式接口和编译器多态
  • 16、前缀和(含源码)
  • 全国计算机等级考试三级Linux应用与开发技术考试-习题汇总
  • Java基础学习:Java agent
  • 【C++】背包问题
  • DFS:floodfill算法解决矩阵联通块问题
  • 03Go 类型总结
  • Angular数据绑定机制
  • axios 和 cookie 的那些事
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Js基础知识(四) - js运行原理与机制
  • Js基础知识(一) - 变量
  • Linux CTF 逆向入门
  • Terraform入门 - 3. 变更基础设施
  • 百度小程序遇到的问题
  • 搞机器学习要哪些技能
  • 给新手的新浪微博 SDK 集成教程【一】
  • 关于字符编码你应该知道的事情
  • 诡异!React stopPropagation失灵
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 深度学习入门:10门免费线上课程推荐
  • 追踪解析 FutureTask 源码
  • ionic入门之数据绑定显示-1
  • kubernetes资源对象--ingress
  • ​【已解决】npm install​卡主不动的情况
  • # 数据结构
  • #define用法
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #pragma once
  • (1)(1.11) SiK Radio v2(一)
  • (八)Flask之app.route装饰器函数的参数
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (简单) HDU 2612 Find a way,BFS。
  • (三)Honghu Cloud云架构一定时调度平台
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)甲方乙方——赵民谈找工作
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ./configure、make、make install 命令
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core中的去虚
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法