【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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】黑马点评短信登录

https://blog.csdn.net/qq_33888850/article/details/129770077 https://blog.csdn.net/weixin_51515308/article/details/128010464 https://www.bilibili.com/video/BV1cr4y1671t?p24 导入数据库 https://github.com/MagicToDo/hm-dianping sql文件在 hm-dianping-init\src…

计算机网络:运输层 - TCP首部格式 连接的创建与释放

计算机网络&#xff1a;运输层 - TCP首部格式 & 连接的创建与释放 TCP首部格式源端口 目的端口序号确认号数据偏移保留控制位窗口检验和紧急指针 TCP连接创建 - 三次握手TCP传输过程TCP连接释放 - 四次挥手 TCP首部格式 TCP的首部如下&#xff1a; 首部的前20 byte是固定的…

【物联网】室内定位技术及定位方式简介

目录 一、概述 二、常用的室内定位技术 2.1 WIFI技术 2.2 UWB超宽带 2.3 蓝牙BLE 2.4 ZigBee技术 2.5 RFID技术 三、常用的室内定位方式 3.1 信号到达时间 3.2 信号到达时间差 3.3 信号到达角 3.4 接收信号强度 一、概述 GPS是目前应用最广泛的定位技术&#xff0…

一种基于稀疏学习的旋转机械故障诊断方法(MATLAB)

稀疏表示方法是一种利用最少原子在过完备字典上表示或逼近信号的方法&#xff0c;该方法具有信号表示的高分辨率、稀疏性、强抗干扰能力和自适应性等优点。稀疏表示聚焦于设计合适的稀疏表示字典和挖掘有用的稀疏先验信息&#xff0c;其核心思想是将故障特征信息近似表示为字典…

Linux下VSCode的安装和基本使用

应用场景&#xff1a;嵌入式开发。 基本只需要良好的编辑环境&#xff0c;能支持文件搜索和跳转&#xff0c;就挺OK的。 之所以要在Linux下安装&#xff0c;是因为在WIN11上安装后&#xff0c;搜索功能基本废了&#xff0c;咋弄都弄不好&#xff0c;又不方便重装win系统&#x…

LLM功能应用的测试艺术:策略与实践

在人工智能技术日新月异的今天,大规模语言模型(LLMs)凭借其强大的自然语言处理能力,正逐渐成为众多应用和服务的核心驱动力。从智能客服到创作辅助,从信息检索到个性化推荐,LLMs的广泛应用对测试策略提出了全新的挑战。本文旨在探讨针对拥有LLM功能的应用或软件,如何制定…

韩顺平0基础学java——第29天

p592-599 线程 用户线程和守护线程 1.用户线程:也叫工作线程&#xff0c;当线程的任务执行完或通知方式结束 2守护线程:一般是为工作线程服务的&#xff0c;当所有的用户线选束&#xff0c;守护线程自动结束 3.常见的守护线程:垃圾回收机制 当我们希望当main线程结束后&…

2.APP测试-安卓adb抓取日志

1.打开手机的开发者模式&#xff0c;打开USB调试 &#xff08;1&#xff09;小米手机打开开发者模式&#xff1a; 【设置】-【我的设备】-【全部参数信息】-快速多次点击【OS版本】-进入开发者模式 &#xff08;2&#xff09;连接手机和电脑&#xff0c;手机打开USB调试 【设置…

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针 0. 引言1. 关于m_scale2. 关于m_ruler3. 关于m_northarrow4. 结语 0. 引言 本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。 1. 关于m_scale m_scale用于图件…

响应式高端网站模板源码图库素材 资源下载平台源码

源码介绍 亲测可用&#xff0c;可用于做娱乐网资源网&#xff0c;功能非常的齐全无任何加密也无任何后门&#xff01;响应式高端网站模板源码图库素材 资源下载平台源码&#xff08;可运营&#xff09; 页面很美观&#xff0c;堪比大型网站的美工&#xff0c;而且页面做的也很…

扫码称重上位机

目录 一 设计原型 二 后台代码 一 设计原型 模拟工具: 二 后台代码 主程序&#xff1a; using System.IO.Ports; using System.Net; using System.Net.Sockets; using System.Text;namespace 扫码称重上位机 {public partial class Form1 : Form{public Form1(){Initialize…

红米手机RedNot11无法使用谷歌框架,打开游戏闪退的问题,红米手机如何开启谷歌框架

红米手机RedNot11无法使用谷歌框架&#xff0c;打开游戏闪退的问题&#xff0c; 1.问题描述2.问题原因3.解决方案3.1配置谷歌框架&#xff1a;3.1软件优化 4.附图 1.问题描述 红米手机打开安卓APP没有广告&#xff0c;直接闪退&#xff0c;无法使用谷歌框架 异常关键词中包含&…

P1223 排队接水

题目描述 有 &#x1d45b; 个人在一个水龙头前排队接水&#xff0c;假如每个人接水的时间为 &#x1d447;&#x1d456;&#xff0c;请编程找出这 &#x1d45b; 个人排队的一种顺序&#xff0c;使得 &#x1d45b;个人的平均等待时间最小。 输入格式 第一行为一个整数 &a…

【洛谷P3366】【模板】最小生成树 解题报告

洛谷P3366 -【模板】最小生成树 题目描述 如题&#xff0c;给出一个无向图&#xff0c;求出最小生成树&#xff0c;如果该图不连通&#xff0c;则输出 orz。 输入格式 第一行包含两个整数 N , M N,M N,M&#xff0c;表示该图共有 N N N 个结点和 M M M 条无向边。 接下…

Hive笔记-5

240619-Hive笔记-5 6.2.2 全表和特定列查询 1) 全表查询 hive (default)> select * from emp; select 查看你要查看的信息 from 你要从哪张表里面查 2) 选择特定列查询 hive (default)> select empno, ename from emp; 注意&#xff1a; &#xff08;1&#xff0…

c++编译器优化不显示拷贝构造函数

一.错误情景&#xff08;无法打印拷贝函数&#xff09; #include<iostream> using namespace std;class person { public:person(){cout << "person默认构造函数调用" << endl;}person(int age){cout << "有参构造函数调用" <…

SUSE linux的快照和恢复

snapper用于创建和管理文件系统快照&#xff0c;并在需要时实现回滚&#xff0c;它还可以用于创建用户数据的磁盘备份。snapper使用btrfs文件系统或者精简配置的被格式化成XFS或EXT4的LVM卷。snapper可以通过命令行或YaST来进行管理。 btrfs是一种copy-on-write文件系统&#x…

R语言数据分析案例33-基于logistic回归下的信用卡违约情况分析

一、选题背景 随着互联网产业的蓬勃发展&#xff0c;传统金融行业开始向着金融互联网化和互联网金融快速转型。网络信贷、信用卡等凭借门槛低、快速便捷、高收益等特点&#xff0c;借助互联网平台存在的优势&#xff0c;迅速成长。然而高收益的背后也存在着高风险&#xff0c;…

2024年,业绩大爆发的企业,都做对了一件事

作为新质生产力之一的AI技术&#xff0c;已经完成了从实验室到场景应用的“惊险一跃”&#xff0c;这背后离不开云计算、大数据技术的日趋成熟。与此同时&#xff0c;大模型、柔性计算等创新的云基础设施解决方案&#xff0c;为企业降本增效、快速高质量地发展&#xff0c;提供…

Python面向对象编程:类和对象的奥秘

更多Python学习内容&#xff1a;ipengtao.com 在Python的世界中&#xff0c;面向对象编程&#xff08;OOP&#xff09;是构建强大应用程序的基石。本文将带你从零开始&#xff0c;一步步探索类和对象的奥秘&#xff0c;让你的代码更加模块化和可重用。面向对象编程是一种编程范…