「 VUE3 + TS + Vite 」父子组件间如何通信?

组件之间传值,大家都很熟悉,涉及到 VUE3 +TS 好多同学就无从下手了,所以分享这篇文章,希望看完后提起 VUE3+TS 能够不慌不忙。

平时使用的函数如:ref、reactive、watch、computed 等需要先引入才能使用,但是本篇文章介绍的 defineProps、withDefaults、defineEmits、defineExpose 都是开箱即用的函数,无需引入。

父向子传值:defineProps

在父组件内给子组件传值时,通过 v-bind 绑定一个数据,然后子组件使用 defineProps 接收数据。

可以传递的数据有两种:字符串类型 和 非字符串类型。字符串类型不需要 v-bind,非字符串需要使用 v-bind,可以简写成冒号(:)。

/* 父组件代码 */ 父组件

子组件接收的时候使用 defineProps,需要注意的是我们使用 TS 需要加类型限制,如果不是 TS 的可以直接使用。

TS 语法使用:

defineProps()

非 TS 语法使用:

defineProps({title: { default: “”, type: string }, list: Array})

对应上边父组件传值,使用 TS 语法接收的子组件代码为:

子组件 {{ title }} {{ list }}

默认值:withDefaults

在非 TS 语法中,default 可以设置默认值,在 TS 语法中,如何设置默认值呢?

withDefaults 是一个无需引入开箱即用的函数,可以接收两个参数,第一个用于defineProps 接收参数,第二个参数是一个对象用于设置默认值。

使用方式1:分离模式

type Props = {title?: string; list?: number[]}withDefaults(defineProps(), {title: “默认值”, list: () => [1, 2]})

使用方式2:组合模式

widthDefault(defineProps(), {title: “默认值”, list: () => [1, 2]})

给上边的子组件添加默认值代码如下:

子组件 {{ title }} {{ list }}

将父组件中传的值删除掉之后,发现设置的默认值就展示出来了。

子向父传值:defineEmits

子组件给父组件进行传值时,都是通过派发事件,去触发父组件中的事件并接收值。

在子组件绑定一个 @click 事件,然后通过 defineEmits 注册自定义事件,当点击 @click 事件时触发 emit 去调用注册事件,然后传递参数。

非 TS 声明语法

// clickname 父组件自定义事件名let emit = defineEmits([ ‘clickname’ ])const postV = () => {emit(‘clickname’, ‘传递的值或变量’)}

TS 声明语法

// clickname 父组件自定义事件名let emit = defineEmits()const postV = (str: string): void => {emit(‘clickname’, str)}

如果是多个自定义事件,写法如下:

type Person = { name: string age: number}let emit = defineEmits()const postV = (str: string): void => {emit(‘clickname’, str)}const postVData = (per: Person): void => {emit(‘getData’, per)}

我们在子组件内,使用 defineEmits 添加派发事件:

子组件 子向父传值 子向父传data

父组件内使用自定义事件,接收子组件传递来的数据:

父组件

defineExpose

子组件向父组件传值时,除了使用 defineEmits 之后,也可以使用 defineExpose ,它是通过把组件自己的属性暴露出去,父组件先获取到子组件,再获取属性值。

defineExpose 接收一个对象参数,包含需要传递的属性。

defineExpose({name, count, ….})

在子组件内,定义和暴露需要传递的属性:

子组件

在父组件内使用 ref 获取到子组件,然后打印属性:

父组件 获取子组件属性

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年7月18日
下一篇 2022年7月18日

相关推荐

  • 自由之刃装备怎么刷?自由之刃装备系统介绍

    大家好,欢迎来到小可说传奇,今天来跟大家介绍一下自由之刃传奇手游的装备系统,自由之刃传奇手游的装备有哪些呢? 自由之刃的装备分为不同的部位,包括头盔、项链、手镯、戒指、腰带和鞋子等…

    2022年7月29日
  • 高手!曼联新援多项传球数据为荷甲顶尖,顶尖出球后卫驰援红魔

    高手!曼联新援多项传球数据为荷甲顶尖,顶尖出球后卫驰援红魔 曼联和阿贾克斯最终就利桑德罗.马丁内斯这笔签约达成了一致,这位阿根廷国脚以5737万欧外加1000万欧元的浮动正式成为了…

    2022年7月22日
  • T1 T2DPS问题~!

    应该说差不多的吧 T1比起T2来敏、耐都要少 问题可能就在套装穿出来的附加属性上的 T1 8件穿满出的是多重+15%伤害 T2 3件是出雄鹰守护加成20% 8件是出个弱点暴露,击中…

    2022年11月12日
  • 一篇学会如何使用Vite重构Vue3项目

    前言 截止发文时间,vite正式版已经发布快2年时间了,vue3也发布到3.2版本了,它的周边设施基本上已经齐活了。也是时候再次重构下我那个vue3.0的开源项目了。 本篇文章就记…

    2022年8月16日
  • 2022年1-6月汽车行业热点舆情事件 (关键词:汽车|新能源|购车)

    企查查数据显示,截至8月初,国内汽车相关现存企业突破1千万家,主要分布在山东、广东、浙江等地,近五年汽车相关企业年注册量呈上升趋势,2021年共新注册245万余家相关企业,同比增长…

    2022年8月23日
  • 热血传奇百区曾经的极品小战士 头盔戒指皆极品,江南老板也穿过

    今天这套装备,是从几年前的一个视频里扒出来的。选择它原因,一方面是因为装备本身的属性相当不错,好几件都堪称极品,鉴赏的时候赏心悦目。另一方面是因为部分装备太有故事了。小编从前只听过…

    2022年8月7日
  • 「津云镜头」震撼!西青这里的“稻田画”美翻了

      湿地湖岛相间、阡陌稻田交错,一步一风景,一景一陶然,目之所及尽是绿意盎然。连日来,西青王稳庄镇万亩稻田生态区以“喜迎二十大,奋进新征程”为主题的巨型稻田画初露新颜。据了解,巨型…

    2022年8月14日
  • 爆肝《数码宝贝:绝境求生》70小时后,我悟了

    在本熊对《数码宝贝:绝地求生》爆肝70个小时后,就开始犹豫要不要将这些东西写下来,毕竟《数码宝贝》这个大IP对于我们这代人的童年意义重大。但作为一个专注游戏测评的本熊来说,要对玩家…

    2022年8月18日
  • 让手机变成智能扫描仪,夸克是如何做到的?

    21世纪经济报道白杨 北京报道 去年10月,阿里智能信息事业群进行组织架构调整,正式成立了夸克事业部。当时,阿里智能信息事业群总裁吴嘉表示,夸克已进入新阶段,正在从一个好用的搜索A…

    2022年8月29日
  • BEB波浪尺的算法分享

    惊艳新代码—来啦!波浪尺的第二部分代码为你奉上! 一大早发布的波浪尺算法代码,评论区讨论热烈,这也从侧面反映出该思路的价值和建立通用性算法的极大意义,不再耽搁,继续分享…

    2022年6月21日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息