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

vue3-标签的ref属性,props的使用,vue3的生命周期详解

标签的ref属性

若ref加在HTML上面 获取的是DOM节点

<template><div class="person"><h1 ref="title1">小聂</h1><h2 ref="title2">学习</h2><h3 ref="title3">vue3</h3><button @click="show">点我输出h1这个元素</button></div>
</template><script lang="ts" setup name="Person">import { ref} from 'vue';//创建title1  用于存储ref标记的内容let title1=ref()function show(){console.log(title1.value)}</script><style>.person{background-color: rebeccapurple;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}img{height: 100px;}
</style>

在这里插入图片描述
点击之后 成功展示出h1里面的内容

若ref加到组件上面的时候

注意 只有里面写了这个defineExpose({x,z}) 才能让父组件看到 x 和z 如果不写 则看不到 这是vue3的保护措施

<template><h2 ref="title2">你好啊,小聂</h2><button @click="showLog">测试展现</button><Person ref="ren"/>
</template><script lang="ts" setup name="App">
import Person from './components/Person.vue';
import { ref } from 'vue';let title2 =ref()let ren=ref()function showLog(){console.log(ren.value)}
</script><style></style>
<template><div class="person"><h1 ref="title1">小聂</h1><h2 ref="title2">学习</h2><h3 ref="title3">vue3</h3><button @click="show">点我输出h1这个元素</button></div>
</template><script lang="ts" setup name="Person">import { ref,defineExpose} from 'vue';//创建title1  用于存储ref标记的内容let title1=ref()let x=ref(0)let y=ref(1)let z=ref(2)function show(){console.log(title1.value)}//需要告诉父组件  你可以看什么defineExpose({x,z})
</script><style>.person{background-color: rebeccapurple;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}img{height: 100px;}
</style>

在这里插入图片描述
如果不写这句话 defineExpose({x,z}) 的结果就是这样的
在这里插入图片描述

props的使用

App.vue的内容

<template><Person :list="persons"/>
</template><script lang="ts" setup name="App">import Person from './components/Person.vue';import { reactive } from 'vue';import {type Persons} from '@/types';let persons =reactive<Persons>([{id:'dadadada1',name:'路飞',age:18},{id:'dadadada2',name:'索隆',age:19},{id:'dadadada3',name:'白胡子',age:50}])</script><style></style>

person.vue的内容

1-只接收

<template><div class="person"><ul><li v-for="item in list" :key="item.id">{{item.name}}--{{item.age}}</li></ul></div>
</template><script lang="ts" setup name="Person">import {type personInter} from '@/types'//1-只接收const props=defineProps(['list'])</script><style>.person{background-color: aqua;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}img{height: 100px;}
</style>

在这里插入图片描述

2-接收+限制类型

<template><div class="person"><ul><li v-for="item in list" :key="item.id">{{item.name}}--{{item.age}}</li></ul></div>
</template><script lang="ts" setup name="Person">import {type personInter, type Persons} from '@/types'//1-只接收// const props=defineProps(['list'])//2-接收+限制类型defineProps<{list:Persons}>()</script><style>.person{background-color: aqua;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}img{height: 100px;}
</style>

在这里插入图片描述
3-接收+限制类型+指定默认值+限制必要性

<template><div class="person"><ul><li v-for="item in list" :key="item.id">{{item.name}}--{{item.age}}</li></ul></div>
</template><script lang="ts" setup name="Person">import {type personInter, type Persons} from '@/types'//1-只接收// const props=defineProps(['list'])//2-接收+限制类型// defineProps<{list:Persons}>()//3-接收+限制类型+指定默认值+限制必要性let props = withDefaults(defineProps<{list?:Persons}>(),{list:()=>[{id:'asdasg01',name:'黑胡子',age:100}]})console.log(props)</script><style>.person{background-color: aqua;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}img{height: 100px;}
</style>

在这里插入图片描述

vue3的生命周期

  • 创建阶段
    setup
  • 挂载阶段
    挂载前 ------- 挂载完毕
    onBeforeMount ------- onMounted
  • 更新阶段
    更新前 ------- 更新完毕
    onBeforeUpdate ------- onUpdated
  • 卸载阶段
    卸载前 ------- 卸载完毕
    onBeforeUnmount ------- onUnmounted
<template><div class="person"><h1>当前的高度为{{ height }}</h1><button @click="addHeigtht">点我高度加一 </button></div>
</template><script lang="ts" setup name="Person">import { ref,onBeforeMount,onMounted,onBeforeUpdate ,onUpdated,onBeforeUnmount,onUnmounted} from 'vue';let height=ref(0)function addHeigtht(){height.value+=1}onBeforeMount(()=>{console.log('挂载前')})onMounted(()=>{console.log('挂载完毕')})onBeforeUpdate(() => {console.log('更新前')})onUpdated(()=>{console.log('更新完毕')})onBeforeUnmount(()=>{console.log('卸载前')})onUnmounted(()=>{console.log('卸载完毕')})</script><style>.person{background-color: aqua;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}img{height: 100px;}
</style>

当我们刚进入页面的时候 控制台打印挂载前 挂载完毕

在这里插入图片描述

当我们点击按钮的时候 控制台会答应更新前 更新完毕
在这里插入图片描述

相关文章:

  • 数据结构 双向链表与双向循环链表 6.17
  • 14.2 《3小时从零搭建企业级LLaMA3语言助手:GitHub配置+私有化模型集成全实战》
  • QGIS新手教程5:图层属性查询与表达式筛选技巧
  • 鸿蒙组件通用属性深度解析:从基础样式到高级定制的全场景指南
  • AI编程浏览器插件(简易版)
  • 云原生时代配置中心全景解读:从Spring Cloud Config到Nacos深度实践
  • 图扑 HT 3D 场景视频嵌入应用功能
  • JVM(4)——引用类型
  • 【JVM 09-垃圾回收】
  • 【在线五子棋对战】七、数据管理模块实现
  • 依赖已导入,已下载,无法使用问题
  • 【MySQL基础】表的功能实现:增删查改详细讲解
  • 基于大模型的急性梗阻性化脓性胆管炎风险预测与治疗方案研究报告
  • 走进Coinate|迪拜第二大交易平台如何构建极速金融引擎
  • 直线拟合 - 最小二乘法与 RANSAC 算法
  • LeetCode 算 法 实 战 - - - 有 效 的 括 号、用 队 列 实 现 栈、用 栈 实 现 队 列 和 设 计 循 环 队 列
  • 佰力博科技与您探讨铁电分析仪适用场景
  • 物联网传输网关、RTU、DTU及SCADA系统的技术难点与未来开发方向
  • 【数据库】大模型时代的数据库新范式:从平替到智能演进
  • node.js使用websockify代理VNC代理使用NoVNC进行远程桌面实现方案
  • 我也来做外国网站购物/网络营销方案设计毕业设计
  • 选择常州网站建设公司/杭州seo排名
  • 北京微信网站建设公司/优化网站首页
  • 网站怎么做能赚钱/网站设计与建设
  • 肇东市建设局网站/bt磁力兔子引擎
  • 网站的链接结构包括/网站内容优化方法