Vue学习记录之五(组件/生命周期)

ops/2024/9/22 22:30:56/

一、组件

在每一个.vue文件可以看作是一个组件,组件是可以复用的,每个应用可以看作是一棵嵌套的组件树。
在这里插入图片描述
在Vue3中,组件导入以后即可直接使用。
在这里插入图片描述

二、组件的生命周期

生命周期就是从诞生(创建)到死亡(销毁) 的过程。
Vue3 组合式API中(setup语法糖模式),是没有beforeCreate 和 created 这两个过程的。可以使用setup去代替。
在这里插入图片描述
运行流程

<template><div></div>
</template>
<script setup lang='ts'>
import { ref,onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted } from 'vue'
console.log("setup")
//创建
onBeforeMount(()=>{console.log("创建之前==========")
})
onMounted(()=>{console.log("创建完成==========")
})
//更新的钩子
onBeforeUpdate(()=>{console.log("更新组件之前==========")
})
onUpdated(()=>{console.log("更新组件完成==========")
})
// 销毁的钩子
onBeforeUnmount(()=>{console.log("销毁之前==========")
})
onUnmounted(()=>{console.log("销毁完成==========")
})</script>
<style scoped></style>

在这里插入图片描述

<template><div ref="getdiv">{{ name }}</div><button @click="change">修改name</button>
</template>
<script setup lang='ts'>
import { ref,onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted } from 'vue'
console.log("setup")
const name = ref("lvmanba")
const getdiv = ref<HTMLDivElement>()  //注意这里的变量名要和上面的ref属性的名称一致。
const change = () =>{name.value = "bird"
}
/*
1、在onMounted之前读取不到dom, onMounted可以读取到。
2、有内容更新的时候,才能触发onBeforeUpdate 和 onUpdated, 如上面点击修改内容的时候
3、onBeforeUpdate 是获取更新之前的dom,onUpdated才能获取更新之后的内容
*/
//创建
onBeforeMount(()=>{console.log("创建之前==========",getdiv.value)  //创建之前是undefined
})
onMounted(()=>{console.log("创建完成==========",getdiv.value) //这里可以获取到值
})
//更新的钩子
onBeforeUpdate(()=>{console.log("更新组件之前==========",getdiv.value?.innerHTML) //更新之前是lvmanba,也就是内容还没有被修改。
})
onUpdated(()=>{console.log("更新组件完成==========",getdiv.value?.innerHTML) // 更新之后是bird
})
// 销毁的钩子
onBeforeUnmount(()=>{console.log("销毁之前==========")
})
onUnmounted(()=>{console.log("销毁完成==========")
})</script>

使用销毁功能:
下面的是插件A.vue

<template><div ref="getdiv">{{ name }}</div><button @click="change">修改name</button>
</template>
<script setup lang='ts'>
import { ref,onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted,onRenderTracked,onRenderTriggered} from 'vue'
console.log("setup")
const name = ref("lvmanba")
const getdiv = ref<HTMLDivElement>()  //注意这里的变量名要和上面的ref属性的名称一致。
const change = () =>{name.value = "bird"
}
/*
1、在onMounted之前读取不到dom, onMounted可以读取到。
2、有内容更新的时候,才能触发onBeforeUpdate 和 onUpdated, 如上面点击修改内容的时候
3、onBeforeUpdate 是获取更新之前的dom,onUpdated才能获取更新之后的内容
*/
//创建
onBeforeMount(()=>{console.log("创建之前==========",getdiv.value)  //创建之前是undefined
})
onMounted(()=>{console.log("创建完成==========",getdiv.value) //这里可以获取到值
})
//更新的钩子
onBeforeUpdate(()=>{console.log("更新组件之前==========",getdiv.value?.innerHTML) //更新之前是lvmanba,也就是内容还没有被修改。
})
onUpdated(()=>{console.log("更新组件完成==========",getdiv.value?.innerHTML) // 更新之后是bird
})
// 销毁的钩子
onBeforeUnmount(()=>{console.log("销毁之前==========")
})
onUnmounted(()=>{console.log("销毁完成==========")
})
onRenderTracked((e)=>{console.log("onRenderTracked:",e)
})
onRenderTriggered((e)=>{console.log("onRenderTriggered:",e)
})</script>

入口文件App.vue
引入组件,并展示组件。

<template><div><!--当一个组件绑定了v-if,会触发组件的创建和销毁。v-show 无此功能。--><A v-if="flag"></A> <br><br><button @click="flag = !flag">{{ flag == true? "销毁":"创建"}}</button></div>
</template>
<script setup lang='ts'>
import { ref,reactive } from 'vue'
import A from './components/A.vue';
const flag = ref<boolean>(false)
</script>

在这里插入图片描述
下面是有一个完整的生命周期:
在这里插入图片描述
其次 还有 onRenderTracked,onRenderTriggered 两个钩子,主要是用来调试使用的。


http://www.ppmy.cn/ops/114440.html

相关文章

【数据结构与算法 | 灵神题单 | 二叉搜索树篇】力扣653

1. 力扣653&#xff1a;两数之和IV - 输入二叉搜索树 1.1 题目&#xff1a; 给定一个二叉搜索树 root 和一个目标结果 k&#xff0c;如果二叉搜索树中存在两个元素且它们的和等于给定的目标结果&#xff0c;则返回 true。 示例 1&#xff1a; 输入: root [5,3,6,2,4,null,7…

Spring Cloud Gateway组件

Spring Cloud Gateway是Spring Cloud生态系统中的一个关键组件&#xff0c;它基于Spring Framework 5、Spring Boot 2和Project Reactor等技 术构建&#xff0c;为微服务架构提供了强大且灵活的网关服务。以下是对Spring Cloud Gateway的详细介绍&#xff1a;一、概述 Spring …

Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 新一代垃圾回收器 ZGC 收集器

文章目录 垃圾回收机制垃圾收集器垃圾收集器分类ZGC 收集器ZGC 的性能优势复制算法指针染色读屏障 ZGC 的工作过程Stop-The-World 暂停阶段并发阶段 垃圾回收机制 垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;&#xff0c;顾名思义就是释放垃圾占用的空…

PostgreSQL配置主从同步

PostgreSQL配置主从同步 1 主、备库安装postgresql软件 su - pg12 cd /home/pg12/resource tar -zxvf postgresql-12.9.tar.gz cd postgresql-12.9/ ./configure --prefix/home/pg12/soft/ make -j 16 && make install2 主、备库配置环境变量 vi ~/.bash_profile…

运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。

一、问题描述 运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行&#xff0c;然后重新运行。 二、问题分析 在idea中&#xff0c;运行一个springboot项目&#xff0c;在使用大量的库和依赖的时候&#xff0c;会出现报错“命令行过长”&…

C#基础(14)冒泡排序

前言 其实到上一节结构体我们就已经将c#的基础知识点大概讲完&#xff0c;接下来我们会讲解一些关于算法相关的东西。 我们一样来问一下gpt吧&#xff1a; Q:解释算法 A: 算法是一组有序的逻辑步骤&#xff0c;用于解决特定问题或执行特定任务。它可以是一个计算过程、一个…

[Redis][环境配置]详细讲解

目录 1.安装 && 简单配置2.文件目录说明3.客户端 1.安装 && 简单配置 Ubuntu下&#xff0c;直接使用sudo apt install redis -y即可支持远程连接&#xff1a;修改/etc/redis/redis.conf 将bind 127.0.0.1改为bing 0.0.0.0作为学习用途&#xff0c;可以将prote…

harbor私有镜像仓库,搭建及管理

私有镜像仓库 docker-distribution docker的镜像仓库&#xff0c;默认端口号5000 做个仓库&#xff0c;把镜像放里头&#xff0c;用什么服务&#xff0c;起什么容器 vmware公司在docker私有仓库的基础上做了一个web页面&#xff0c;是harbor docker可以把仓库的镜像下载到本地&…