【vue3|第12期】Vue3的Props详解:组件通信

日期:2024年6月19日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006

说在最前面:本文 vue3 的示例代码,在没有另外声名的情况下,均采用 <script setup> 组合式代码风格,风格统一,避免混乱,请各位新老食客放心食用哈 ^ _ ^


文章目录

  • 一、前言
  • 二、什么是 Props?
  • 三、如何定义 Props?
    • 1、接收属性值,不限制数据类型
    • 2、接收属性值,进行数据类型检查
    • 3、接收属性值,进行数据类型检查,并给定默认值
  • 四、Props 有什么作用?
  • 五、如何在组件中使用 Props?
  • 六、注意事项
  • 七、总结


在这里插入图片描述


一、前言

在 Vue.js 的世界中,组件是构建用户界面的基本单元。为了实现组件之间的数据传递和交互,Vue 提供了一种强大的机制——props(属性)。本篇博客旨在为 Vue3 的新手宝宝们详细解读 props 的概念、定义方法、作用以及应用场景,帮助大家快速掌握并运用 props 来构建灵活且可复用的组件。

二、什么是 Props?

propsVue 组件 之间传递数据的一种方式。在父组件中,你可以通过标签属性(Attributes)的方式将数据传递给子组件,子组件可以通过声明 props 选项 来接收来自父组件的数据,并在其模板中使用这些数据。简而言之,props 是一种让组件之间进行通信的方式,使得组件能够更加通用可复用

三、如何定义 Props?

1、接收属性值,不限制数据类型

<template>
	// 可以使用 prop1, prop2, prop3,如下:
	<h1> prop1 </h1>
	<p> prop2 </p>
	<p> prop3 </p>
</template>
<script setup lang='ts'>
// 这一行代码可以省略,vue3 默认有 defineProps 宏的
import { defineProps } from 'vue';

// 接收父组件传递过来的值
const props = defineProps([prop1, prop2, prop3])
</script>

在上述代码中,defineProps 方法是在 <script setup> 环境下使用的语法糖。

我们通过 defineProps 定义了三个Props属性:prop1、prop2和prop3。

此时,这三个属性将会被映射到组件的 props 选项 中。

2、接收属性值,进行数据类型检查

<template>
	// 可以使用 prop1, prop2, prop3,如下:
	<h1> prop1 </h1>
	<p> prop2 </p>
	<p> prop3 </p>
</template>
<script setup lang='ts'>
// 这一行代码可以省略,vue3 默认有 defineProps 宏的
import { defineProps } from 'vue';

// 定义interface
interface PropsInter {
	prop1:string;
	prop2:number;
	prop3:boolean;
}

// 接收父组件传递过来的值
const props = defineProps<PropsInter>()

</script>

在上述代码中,我们为 prop1 指定了 string 类型,为 prop2 指定了 number 类型,为 prop3 指定了 boolean 类型。

VS Code中,安装了对应的插件的话,书写代码的时候会进行类型检查,让错误类型立马暴露出来,可以及时更正。

在使用组件时,Vue 也会根据这些类型信息进行编译时的类型检查,有效避免了一些潜在的错误

3、接收属性值,进行数据类型检查,并给定默认值

<template>
	// 可以使用 prop1, prop2, prop3,如下:
	<h1> prop1 </h1>
	<p> prop2 </p>
	<p> prop3 </p>
</template>
<script setup lang='ts'>

// 这一行代码可以省略,vue3 默认有 defineProps 宏的
import { defineProps } from 'vue';

// 接收父组件传递过来的值
const props = defineProps({
	prop1:{
		type:String,
		default:"默认值123"
	},
	prop2:{
		type:Number,
		default:123	
	},
	prop3:{
		type:Boolean,
		default:true
	}
})

</script>

<script setup lang='ts'>

// 定义interface
interface PropsInter {
	prop1:string;
	prop2:number;
	prop3:boolean;
}

// 这一行代码可以省略,vue3 默认有 defineProps 宏的
import { defineProps,withDefaults } from 'vue';

// 接收父组件传递过来的值
const props = withDefaults(defineProps<PropsInter>(),{
	prop1:"默认值123", 
	prop2:123, 
	prop3:true
});
	
</script>

在上述示例中,如果在使用组件时未传递相应的 Props 属性Vue 将会使用我们设置的默认值

四、Props 有什么作用?

Props 的主要作用是:

  • 数据传递:通过 Props,父组件可以向子组件传递数据,实现组件之间的数据共享。
  • 组件复用:提高组件的复用性,使得组件可以在不同的场景下接收不同的数据。
  • 简化逻辑:组件只关注自己的功能,而不需要考虑数据的来源。
  • 类型检查与验证:通过定义 Props 的类型和验证函数,可以确保接收到的数据符合预期的格式和范围。

五、如何在组件中使用 Props?

  • 子组件:MyComponent.vue
<!-- 子组件 MyComponent.vue -->
<template>
  <div>
    <p>Message: {{ name }}</p>
    <p>Age: {{ age }}</p>
  </div>
</template>

<script setup lang='ts'>
// 这一行代码可以省略,vue3 默认有 defineProps 宏的
import { defineProps } from 'vue';

// 接收父组件传递过来的 name,age
defineProps(["name","age"])

</script>
  • 父组件
<!-- 父组件 -->
<template>
  <div>
    <my-component name="Commas" age="28"/>
  </div>
</template>

<script setup lang='ts'>
import MyComponent from './MyComponent.vue';
</script>

六、注意事项

  • 不要在子组件中直接修改 Props 的值。如果子组件需要基于 Props 的值进行计算或转换,应该使用 computed 属性或 methods 方法。
  • 尽量避免使用数组或对象作为 Props 的值,因为这可能导致父组件和子组件之间的数据引用问题。如果确实需要使用,可以考虑使用深拷贝或其他方法来避免直接修改原始数据。
  • 在定义 Props 时,尽量使用明确的类型和验证函数,以确保数据的准确性和可靠性。

七、总结

PropsVue3 中非常重要的概念,掌握好它对于构建高效、可维护的组件化应用至关重要。


参考文章:

  • Vue.js
  • 《学习Vue3的defineProps方法》

版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/139829806

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/734553.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务——重复消费(幂等解决方案)

目录 一、唯一ID机制二、幂等性设计三、状态检查机制四、利用缓存和消息队列五、分布式锁总结 在微服务中&#xff0c;防止重复消费的核心思想是通过设计使得操作一次与多次产生相同的效果&#xff0c;并为每次操作生成唯一的ID。这样&#xff0c;即使在消息被重复发送的情况下…

Stable Diffusion 插件安装与推荐,助力你的AI绘图

在上一篇文章我们安装了Stable Diffusion &#xff0c;这篇文章我们来安装Stable Diffusion的插件 Stable Diffusion的插件是绘画中重要的一环&#xff0c;好的插件可以让你的绘画更加得心应手 中英双语插件 为什么要安装中英双语插件呢&#xff0c;不能只安装中文插件吗&…

计算机组成原理 | 数据的表示、运算和校验(1)数值型数据

有了一个二进制代码&#xff0c;首先要知道他是带符号的还是不带符号的&#xff0c;接着要知道他是原码还是补码还是反码&#xff0c;最终才能确定他的真值。 补码和移码&#xff1a;符号相反、数值位相同 表示范围不理解 数的定点表示法 对于反码而言&#xff1a;10000000表示…

Android蓝牙开发(一)之打开蓝牙和设备搜索

private BluetoothManager bluetoothmanger; private​ BluetoothAdapter bluetoothadapter; /** 判断设备是否支持蓝牙 */ bluetoothmanger (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); bluetoothadapter bluetoothmanger.getAdapter(); if (bl…

46、基于自组织映射神经网络的鸢尾花聚类(matlab)

1、自组织映射神经网络的鸢尾花聚类的原理及流程 自组织映射神经网络&#xff08;Self-Organizing Map, SOM&#xff09;是一种用于聚类和数据可视化的人工神经网络模型。在鸢尾花聚类中&#xff0c;SOM 可以用来将鸢尾花数据集分成不同的类别&#xff0c;同时保留数据间的拓扑…

MyBatisPlus中的selectById方法

今天在编代码时用selectById方法时&#xff0c;不小心写错了&#xff0c;参数传了个实体类。本来应该传id的。 但是没报错&#xff0c;于是进入源码看了一下。 这是源码 里面的参数是一个序列化类型的。 后面发现我的实体类实现了这个接口所以能才能传进去。不实现就传不了 我…

SSL/TLS握手

文章目录 SSL/TLSTLS历史发展层次结构SSL/TLS握手协议TLS1.2 Vs TLS1.3 安全通信协议是一类用于保护计算机网络上数据传输安全的协议。这些协议通过加密、身份验证和数据完整性机制来防止数据被窃听、篡改或伪造。以下是一些主要的安全通信协议&#xff1a;SSL/TLS, IPsec, SSH…

idea配置本地maven

软件名地址链接说明MavenMaven – Download Apache Maven依赖管理 下载bin.zip 环境变量 测试安装 修改配置文件 本地依赖存储位置 新建文件夹 修改配置 国内镜像源 <mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>ali…

大电流一体成型电感CSEB1350系列,助力实现DC-DC转换器小尺寸、高效率

DC-DC转换器 , 转换器 , 科达嘉 DC-DC转换器作为一种电压转换装置&#xff0c;在电子产品、电源系统、工业控制、新能源等领域广泛应用。。。 DC-DC转换器作为一种电压转换装置&#xff0c;在电子产品、电源系统、工业控制、新能源等领域广泛应用。随着各行业用户对DC-DC转换器…

pytorch神经网络训练(VGG-16)

VGG-16 导包 import torchimport torch.nn as nnimport torch.optim as optimimport torchvisionfrom torchvision import datasets, transformsfrom torch.utils.data import DataLoaderimport matplotlib.pyplot as plt 数据预处理和增强 transform transforms.Compose(…

Flutter-实现头像叠加动画效果

实现头像叠加动画效果 在这篇文章中&#xff0c;我们将介绍如何使用 Flutter 实现一个带有透明度渐变效果和过渡动画的头像叠加列表。通过这种效果&#xff0c;可以在图片切换时实现平滑的动画&#xff0c;使 UI 更加生动和吸引人。 需求 我们的目标是实现一个头像叠加列表&…

基于顺序存储的环形队列算法库构建

学习贺利坚老师基于数组的环形队列 数据结构之自建算法库——顺序环形队列_下空队列q中依次入队列数据元素abc-CSDN博客文章浏览阅读5.2k次&#xff0c;点赞6次&#xff0c;收藏6次。本文针对数据结构基础系列网络课程(3)&#xff1a;栈和队列中第9课时环形队列的存储及基本操…

基于ESP8266串口WIFI模块ESP-01S在Station模式(即接收无线信号( WiFi))下实现STC单片机与手机端网路串口助手相互通信功能

基于ESP8266串口WIFI模块ESP-01S在Station模式(即接收无线信号( WiFi))下实现STC单片机与手机端网路串口助手相互通信功能 ESP8266_01S引脚功能图ESP8266_01S原理图ESP8266_01S尺寸图检验工作1、USB-TTL串口工具(推荐使用搭载CP2102芯片的安信可USB-T1串口)与ESP8266_01S…

会声会影2024永久破解和谐版下载 包含激活码序列号

亲爱的创作伙伴们&#xff0c;今天我要分享一个让我的影视编辑生活大放异彩的神器——会声会影2024破解版本&#xff01;&#x1f389;&#x1f31f; &#x1f308;**功能全面升级**&#xff1a;作为一款专业的视频编辑软件&#xff0c;会声会影2024破解版本不仅继承了之前版本…

KEITHLEY吉时利24611kW 脈沖模式 SourceMeter 手侧

KEITHLEY吉时利24611kW 脈沖模式 SourceMeter 手侧

【vue3|第13期】深入了解Vue3生命周期:管理组件的诞生、成长与消亡

日期&#xff1a;2024年6月22日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

【大数据 复习】第8章 Hadoop架构再探讨

一、概念 1.Hadoop1.0的核心组件&#xff08;仅指MapReduce和HDFS&#xff0c;不包括Hadoop生态系统内的Pig、Hive、HBase等其他组件&#xff09;&#xff0c;主要存在以下不足&#xff1a; &#xff08;1&#xff09;抽象层次低&#xff0c;需人工编码 &#xff08;2&#xf…

【Linux】基础IO_4

文章目录 六、基础I/O4. 动静态库 未完待续 六、基础I/O 4. 动静态库 既然我们能够成功创建静态库了&#xff0c;接下来我们将这个代码打包成动态库&#xff1a; shared: 表示生成共享库格式 fPIC&#xff1a;产生位置无关码(position independent code) 动态库库名规则&…

Swift 中的动态数组

Swift 的 Array 类型是一种强大而灵活的集合类型&#xff0c;可以根据需要自动扩展或缩减其容量。 动态数组的基本概念 Swift 中的数组是基于动态数组&#xff08;dynamic array&#xff09;的概念实现的。动态数组能够根据需要自动调整其容量&#xff0c;以容纳新增的元素&a…

第一题(伏羲六十四卦)

题目&#xff1a; 首先伏羲64卦解密 再用base64解密即可