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

news2024/11/27 12:48:20

日期: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.coloradmin.cn/o/1851811.html

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

相关文章

SpringBoot开发实用篇(一)

一&#xff1a;热部署 1&#xff1a;手工启动热部署 关于热部署 重启&#xff08;Restart&#xff09;:自定义开发代码&#xff0c;包含类、页面、配置文件等&#xff0c;加载位置restart类加载器重载&#xff08;Reload&#xff09;:jar包&#xff0c;加载位置base类加载器…

阿里云发送验证码流程

目录 1. 阿里云短信服务简介 2. 阿里云验证码发送流程 2.1 申请阿里云短信服务 2.2 短信模板及阿里云秘钥 1.开发者可以在自己的应用程序中集成短信发送功能。绑定发起测试的手机号&#xff0c;需要绑定的手机号才能成功发送验证码&#xff0c;其他的用户手机号发送的验…

统信UOS 安装二级制版MySQL8.4

统信UOS 安装二级制版MySQL8.4 建立MySQL用户和用户组 sudo groupadd mysqlsudo useradd -r -g mysql -s /bin/false mysql下载MySQL安装包 wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz解压缩MySQL安装包 sudo tar -xvf m…

nginx架构基本数据结构配置模块请求详解

初探nginx架构 众所周知&#xff0c;nginx性能高&#xff0c;而nginx的高性能与其架构是分不开的。那么nginx究竟是怎么样的呢&#xff1f;这一节我们先来初识一下nginx框架吧。 nginx在启动后&#xff0c;在unix系统中会以daemon的方式在后台运行&#xff0c;后台进程包含一…

鸿蒙 HarmonyOS NEXT星河版APP应用开发—上篇

一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议&#xff1a;软件和依赖安装目录不要使用中文字符软件安装包下载完成后&#xff0…

mac电脑守护神CleanMyMac2024免费版本下载

&#x1f31f; 电脑的守护神&#xff1a;CleanMyMac&#x1f47e; 亲爱的数码控们&#xff0c;是不是每次看到电脑上满满的垃圾文件和缓慢的运行速度就感到头疼呢&#xff1f;别怕&#xff0c;今天我要来给你们安利一款神奇的小帮手——CleanMyMac&#xff01;它可是我们电脑的…

class中的溢出滑动效果

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style>*{margin: 0;padding: 0;}.frame-pages{width: 30%;height: 60px;display: flex;justify…

【Android面试八股文】来说一说Activity,Window,View三者的联系和区别吧

文章目录 ActivityWindowView为什么需要 Window?Window和View的关系Activity与Window的关系示例流程图示总结扩展阅读在Android应用程序开发中, Activity、Window 和 View 是构建用户界面的核心组件。它们之间有着紧密的联系,但角色和职责各不相同。下面是对它们联系和区别…

Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn

在探索现代 JavaScript 生态系统时&#xff0c;我们常常会遇到新兴技术的快速迭代和改进。其中&#xff0c;包管理工具的发展尤为重要&#xff0c;因为它们直接影响开发效率和项目性能。最近&#xff0c;pnpm 作为一种新的包管理工具引起了广泛关注。它不仅挑战了传统工具如 np…

一键转换PDL至HTML,轻松驾驭文档格式,高效办公新纪元从此开启!

在信息爆炸的时代&#xff0c;文档格式繁多&#xff0c;如何高效处理这些文档成为了每个职场人士关注的焦点。现在&#xff0c;我们为您带来一款革命性的工具——一键转换PDL至HTML&#xff0c;让您轻松驾驭文档格式&#xff0c;开启高效办公新纪元&#xff01; 首先&#xff0…

“论SOA在企业集成架构设计中的应用”必过模板,软考高级,系统架构设计师论文

论文真题 企业应用集成(Enterprise Application Integration, EAI)是每个企业都必须要面对的实际问题。面向服务的企业应用集成是一种基于面向服务体系结构(Service-OrientedArchitecture,SOA)的新型企业应用集成技术,强调将企业和组织内部的资源和业务功能暴露为服务,实现…

【深度学习系列】全面指南:安装TensorFlow的CPU和GPU版本

本博客旨在为初学者提供一份全面的指南&#xff0c;介绍如何根据个人电脑的配置选择并安装适合的TensorFlow版本。内容涵盖了如何查看电脑显卡型号以确定是安装CPU还是GPU版本的TensorFlow&#xff0c;创建Python虚拟环境&#xff0c;以及使用conda命令查找可用的TensorFlow版本…

34 - 指定日期的产品价格(高频 SQL 50 题基础版)

34 - 指定日期的产品价格 -- row_number(行号) 生成连续的序号&#xff0c;不考虑分数相同 -- 在2019-08-16之前改的价格&#xff0c;使用最近一期的日期&#xff0c;没有在2019-08-16之前改的价格&#xff0c;默认价格为10 select t.product_id, t.new_price as price from (s…

51单片机定时器中断配置

测试环境 单片机型号&#xff1a;STC8G1K08-38I-TSSOP20&#xff0c;其他型号请自行测试&#xff1b; IDE&#xff1a;Keil C51&#xff1b; 定时器配置及主要代码 以定时器T0为例&#xff0c;查看手册&#xff0c;有4种工作模式&#xff1a;模式0&#xff08;16位自动重装载…

基于淘宝商城用户购物行为数据分析系统

摘 要 在电商行业高速发展的今天&#xff0c;用户购物行为数据量呈指数型增长&#xff0c;传统的数据处理架构已经无法满足于现如今的数据处理需求。针对于这样的需求本课题设计了一种基于淘宝的用户购物行为分析系统&#xff0c;旨在通过对大量数据进行分析处理进而深入研究用…

全国青少年人工智能创新挑战赛考试系统果然卡壳了

本比赛的官网地址是&#xff1a;http://aiic.china61.org.cn/niWXB 昨天考的全国青少年人工智能创新挑战赛的图形化编程卡的没有答题区&#xff0c;有的是空白&#xff0c;有的是组卷&#xff0c;大家先熟悉题目&#xff0c;构思怎么编程&#xff0c;两道编程题5050分值&#…

对兼容各操作系统的Anki选择题模板的更新——提供更方便的笔记修改功能

2021年当我想做一个兼容各操作系统的Anki选择题模板的时候&#xff0c;到处搜索茧中网&#xff0c;根本找不到相关内容&#xff0c;直到偶然在github上看到Simon Lammer的Anki持久化模块&#xff0c;才算真正实现。现在再在茧中网上搜索兼容各种操作系统的Anki选择题模板&#…

剖析 Kafka 消息丢失的原因

文章目录 前言一、生产者导致消息丢失的场景场景1&#xff1a;消息体太大解决方案 &#xff1a;1、减少生产者发送消息体体积2、调整参数max.request.size 场景2&#xff1a;异步发送机制解决方案 &#xff1a;1、使用带回调函数的发送方法 场景3&#xff1a;网络问题和配置不当…

FineReport报表案例

普通报表 保存的文件类型为 cpt&#xff0c;依靠着单元格的扩展与父子格的关系来实现模板效果&#xff0c;可进行参数查询&#xff0c;填报报表&#xff0c;图表设计等等&#xff0c;但是在分页预览模式下不能在报表主体中展示控件&#xff0c;而且单元格间相互影响&#xff0c…

IDEA快速入门02-快速入门

二、快速入门 2.1 打开IDEA,点击New一个项目 入口&#xff0c;依次打开 File -> New -> Project。 2.2 使用Spring Initializr方式构建Spring Boot项目 2.3 设置项目所属组、项目名称、java版本等 2.4 选择SpringBoot版本及依赖组件 点击Create进行创建。 2.6 创建成…