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

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

一、组件

在每一个.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.mrgr.cn/news/30321.html

相关文章:

  • 使用VSCode远程连接服务器并解决Neo4j无法登陆问题
  • 「 审稿答复 」如何写Response评论回复的“第一句”
  • MySQL技巧之跨服务器数据查询:基础篇-动态参数
  • Linux最深刻理解页表于物理内存
  • 高效编程训练:Spring Boot系统设计与实践
  • TCP连接如何保障数据传输安全
  • python sqlite3数据库介绍(如何使用参数化查询防止SQL注入攻击)(直接通过网络让其他主机访问某台主机上的SQLite数据库是不被直接支持的)
  • sed awk 第二版学习(五)—— 高级 sed 命令
  • 利用反射实现动态代理
  • SQL案例分析:美联储降息前后的复利差距
  • 2024ICPC第一场网络赛补题
  • MATLAB系列09:图形句柄
  • 基于SpringBoot+Vue+MySQL的智能物流管理系统
  • CISP备考题库(八)
  • JavaScript Array 数组对象
  • HubSpot Sales Hub 是什么 | HubSpot Sales Hub:推动业务全球化的智能销售引擎
  • 【60天备战2024年11月软考高级系统架构设计师——第21天:系统架构设计原则——高内聚低耦合】
  • 0.5.4 知识库管理微调
  • 把设计模式用起来!(3)用不好模式?之时机不对
  • 【学习资料】袋中共36个球,红白黑格12个,问能一次抽到3个红4个白5个黑的概率是多少?
  • 微信小程序案例:比较数字大小(含代码)
  • 9月19日,每日信息差
  • 入门数据结构JAVA DS——二叉树的介绍 (构建,性质,基本操作等) (1)
  • SpringCloud系列之一---搭建高可用的Eureka注册中心
  • 组件封装有哪些注意事项—面试常问优美回答
  • csgo使用服务器一键开服联机