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

Vue 组件生命周期(四)

Vue 组件生命周期

    Vue3 的组件生命周期可以概括为四个阶段:创建、挂载、更新、销毁。每个阶段都包含了一组钩子函数,用于在不同阶段执行特定的操作。

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

 

一、创建阶段

  1. setup()
    • Vue3 引入的新生命周期函数,替代了 Vue2 的 beforeCreate 和 createdsetup() 在组件创建之前被调用,用于设置响应式数据、方法等。
    • 注意setup() 中无法访问 this,因为它在组件实例初始化之前执行。

二、挂载阶段

  1. onBeforeMount()
    • 组件挂载前调用,此时模板已编译成渲染函数,但尚未挂载到 DOM。
  2. onMounted()
    • 组件挂载后调用,此时组件已渲染到 DOM 中,可以执行 DOM 相关的操作。

三、更新阶段

    Vue3 组件在响应式数据变化时会进入更新阶段,这个阶段包括两个重要的钩子函数。

  1. onBeforeUpdate()
    • 组件即将因为响应式数据变化而重新渲染前调用,可用于访问当前的 DOM 状态。
  2. onUpdated()
    • 组件因为响应式数据变化而重新渲染后调用,可用于执行更新后的副作用操作。

四、销毁阶段

当 Vue 组件不再需要时,会进入销毁阶段,这个阶段包括两个钩子函数。

  1. onBeforeUnmount()
    • 组件即将被卸载前调用,可用于执行清理操作,如取消事件监听器、清除定时器等。
  2. onUnmounted()
    • 组件已卸载后调用,此时组件的所有指令都已解绑,所有事件监听器都已被移除,所有的子实例也都被销毁。

演示:

<template>
	<div>
		<p>我是组件</p>
		<el-button @click="change">{{name}}</el-button>
	   <!-- 

    	<hr/>
		<button @click="show = !show">隐藏/显示自定义功能组件</button>
		<My v-if="show" />
     -->
	</div>
</template>

<script setup>
  import{ref,onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted} from 'vue'
  //导入组件
  import My from './My.vue'


 const name=ref("mike");
 const show=ref(true)
 
 
 const change=()=>{
	 //数据处理逻辑
	  name.value = (name.value == 'mike') ? '麦克' : 'mike'
 }

console.log('创建', name.value)

//创建钩子
 onBeforeMount(() => {
	 //创建之前是读不到dom的
	console.log("挂载之前",name.value)
});


 onMounted(() => {
	 //创建完成之后
	console.log("挂载完毕",name.value)
});


//更新
onBeforeUpdate(() => {
    //获取的是更新之前的dom
    console.log("更新之前",name.value);
});

onUpdated(() => {
    console.log("更新完毕",name.value);
});
//销毁
onBeforeUnmount(() => {
    console.log("销毁之前",name.value);
});

onUnmounted(() => {
    console.log("销毁完毕",name.value);
});

</script>

<style>
	.el-button{
		width:150px;
	}
</style>

演示效果: 

1、运行后

2、单击按钮 

3、重新保存

总结:

    Vue3 的组件生命周期为开发者提供了更精细的控制能力,通过合理使用这些生命周期钩子,可以编写出更加高效、可维护的 Vue 应用。希望本文能帮助读者更好地理解 Vue3 的组件生命周期,并在实际开发中灵活运用。 


http://www.kler.cn/a/378186.html

相关文章:

  • 【ROS2】话题发布和订阅的频率控制
  • CodeQL学习笔记(5)-CodeQL for Java(AST、元数据、调用图)
  • Java栈和队列的快速入门
  • 《AI产品经理手册》——解锁AI时代的商业密钥
  • react18中redux-promise搭配redux-thunk完美简化异步数据操作
  • 数学建模学习(135):使用Python基于WSM、WPM、WASPAS的多准则决策分析
  • Docker:网络
  • synchronized加锁原理以及锁升级过程
  • 微服务架构深入理解 | 技术栈
  • vue3项目history模式部署404处理,使用 historyApiFallback 中间件支持单页面应用路由
  • 最新指南,如何使用 ChatGPT 提示词指令进行学术写作
  • 人工智能原理实验一:知识的表示与推理实验
  • Windows Server2012 R2搭建NFS服务器
  • 认识类与对象(下)
  • 算法——递推
  • 组织架构图
  • Linux: network: hw csum failure
  • 【ceral】c++轻量的序列化库
  • 2024 年( 第五届)“ 大湾区杯” 粤港澳金融数学建模竞赛A 题
  • 背包问题的详细理解(无基础->详细掌握)
  • Ubuntu 24 配置vsftp
  • SpringBoot抗疫物资管理与数据分析系统
  • vulhub之Spring篇
  • AIGC与虚拟现实(VR)的结合与应用前景
  • 人工智能中FOPL语言是什么?
  • php实现sl651水文规约解析