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

[GN] Vue3.2 快速上手 ---- 核心语法2

文章目录

  • 标签的 ref 属性
  • props
  • 生命周期
  • 自定义hook
  • 总结


标签的 ref 属性

  • 用在普通DOM标签上,获取的是DOM节点。
  • 用在组件标签上,获取的是组件实例对象。
  1. 用在普通DOM标签上:
<template><div class="person"><h3 ref="title">Vue</h3><button @click="showLog">点我打印</button></div>
</template><script lang="ts" setup name="Person">import {ref} from 'vue'let title = ref()function showLog(){// 通过id获取元素const t1 = document.getElementById('title')// 打印内容console.log(t1?.innerText) //获取的是`DOM`节点。// 通过ref获取元素console.log(title.value)}
</script>
  1. 用在组件标签上:
    • 父组件App使用子组件Person
    • Person组件标签上使用ref 可以获取组件实例
    • 但需要子组件代码中 使用defineExpose暴露内容
<!-- 父组件App.vue -->
<template><Person ref="ren"/><button @click="test">测试</button>
</template><script lang="ts" setup name="App">import Person from './components/Person.vue'import {ref} from 'vue'let ren = ref()function test(){console.log(ren.value.name)console.log(ren.value.age)}
</script><!-- 子组件Person.vue中要使用defineExpose暴露内容 -->
<script lang="ts" setup name="Person">import {ref,defineExpose} from 'vue'// 数据let name = ref('张三')let age = ref(18)// 使用defineExpose将组件中的数据交给外部defineExpose({name,age})
</script>

props

  • App.vue是父组件,Person是子组件
  • 父组件中 使用子组件 < Person :list=“persons” /> 。并给子组件传送list值
  • 父中定义了发送对象格式 子中也可定义接受格式
  • 详见下方代码

新建文件type.ts定义接口

// 定义一个接口,限制每个Person对象的格式
export interface PersonInter {id:string,name:string,age:number
}// 定义一个自定义类型Persons
export type Persons = Array<PersonInter>

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>([ //Persons类型的数据 <>是数组{id:'e98219e12',name:'张三',age:18},{id:'e98219e13',name:'李四',age:19},{id:'e98219e14',name:'王五',age:20}])
</script>

Person.vue中:

<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 {defineProps} from 'vue'
import {type Persons} from '@/types'// 第一种写法:仅接收
// const props = defineProps(['list'])// 第二种写法:接收+限制类型
// defineProps<{list:Persons}>()// 第三种写法:接收+限制类型+指定默认值+限制必要性
let props = withDefaults(defineProps<{list?:Persons}>(),{list:()=>[{id:'asdasg01',name:'小猪佩奇',age:18}]
})
console.log(props)
</script>

生命周期

Vue3的生命周期

创建阶段:setup

挂载阶段:onBeforeMountonMounted

更新阶段:onBeforeUpdateonUpdated

卸载阶段:onBeforeUnmountonUnmounted

常用的钩子:onMounted(挂载完毕)、onUpdated(更新完毕)、onBeforeUnmount(卸载之前)

自定义hook

  • hook—— 本质是一个函数,把setup函数中使用的Composition API进行了封装

  • 自定义hook的优势:复用代码, 让setup中的逻辑更清楚易懂。

useSum.ts中内容如下:

import {ref,onMounted} from 'vue'export default function(){let sum = ref(0)const increment = ()=>{sum.value += 1}//向外部暴露数据return {sum,increment}
}		

-useDog.ts中内容如下:

import {reactive,onMounted} from 'vue'
import axios,{AxiosError} from 'axios'export default function(){let dogList = reactive<string[]>([])// 方法async function getDog(){// 发请求let {data} = await axios.get('https://dog.ceo/api/breed/pembroke/images/random')// 维护数据dogList.push(data.message)}//向外部暴露数据return {dogList,getDog}
}

-组件中具体使用:

<template><h2>当前求和为:{{sum}}</h2><button @click="increment">点我+1</button><hr><img v-for="(u,index) in dogList.urlList" :key="index" :src="(u as string)"> <span v-show="dogList.isLoading">加载中......</span><br><button @click="getDog">再来一只狗</button>
</template><script setup lang="ts">import useSum from './hooks/useSum' // 引入hookimport useDog from './hooks/useDog'let {sum,increment,decrement} = useSum() //直接调用let {dogList,getDog} = useDog()
</script>

总结

下一篇将会更新vue3.0核心语法最后篇章 — 路由部分!!

相关文章:

  • flask 与小程序 菜品详情和分享功能
  • 全球光伏知名企业-晶科能源联合泛微采知连,建立文控管理平台
  • C#基础:通过QQ邮件发送验证码到指定邮箱
  • 运动的解析:从机械运动到自由落体,探索物体运动的基本规律与数学描述
  • php基础学习之代码框架
  • 【JavaEE Spring】SpringBoot 日志
  • python-分享篇-爱心
  • 【Java】HttpServlet类简单方法和请求显示
  • 什么是OSPF?为什么需要OSPF?OSPF基础概念
  • USRP相关报错解决办法
  • 为什么 macOS 比 Windows 稳定?
  • TDengine启动和连接问题
  • uniapp嵌套webview,无法返回上一级?
  • MySQL死锁场景与应对方案
  • 51单片机中断
  • 【译】JS基础算法脚本:字符串结尾
  • Akka系列(七):Actor持久化之Akka persistence
  • Javascript基础之Array数组API
  • Median of Two Sorted Arrays
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • V4L2视频输入框架概述
  • vue数据传递--我有特殊的实现技巧
  • 测试开发系类之接口自动化测试
  • 分布式任务队列Celery
  • 工作手记之html2canvas使用概述
  • ------- 计算机网络基础
  • 小程序 setData 学问多
  • 小李飞刀:SQL题目刷起来!
  • 一文看透浏览器架构
  • 走向全栈之MongoDB的使用
  • ionic异常记录
  • kubernetes资源对象--ingress
  • # centos7下FFmpeg环境部署记录
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • $.ajax()参数及用法
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (6)设计一个TimeMap
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (笔试题)分解质因式
  • (剑指Offer)面试题34:丑数
  • (转)德国人的记事本
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET的数据绑定
  • .NET构架之我见
  • .NET关于 跳过SSL中遇到的问题
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @我的前任是个极品 微博分析
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [100天算法】-实现 strStr()(day 52)