百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Vue.js 的组件 prop 属性详解

itomcoil 2025-01-14 14:20 19 浏览

prop 属性

我们在实际的开发中, 经常的会用到父组件传递数据到子组件中,这个时候, 就可以用到 prop 属性配置。

本节知识点思维导图

prop 可以让你在组件上注册一些自定义的 attribute。可以是基于数组 prop: [] 的简单语法,也可以是基于对象 prop:{} 的语法。举个例子:

F5 调试查看页面

在实际中, 可能是一个集合数据, 这个时候, 就而已用到我们之前在 v-for 那个教程中没有说的知识点, 就是 v-for 如何在组件中使用。

编写一个简单的例子:

查看效果:

除了静态使用, 和动态使用, 还可以传入另外的数据类型。

传入数值类型

我们增加如下代码来使用整型值,代码如下:

查看效果:

这里不管是什么类型最好都要使用 v-bind 语法进行赋值。 以免不同的数据类型出现结果和你想象中的不一致的情况。


传入布尔值

布尔值需要注意的是 JavaScript 的布尔赋值一致, 所以需要注意。 布尔使用代码如下:

打开效果为:

在这里不管是那种情况下都需要使用绑定指令进行数据的绑定。


传入一个数组

在实际的开发中, 数组的使用应该是最多的, 也是最普通的。毕竟数据都在数组中存放。

直接举例。

浏览器中查看数组例子的效果:

这里使用了各种方式进行数据的传入。 秉承学习从难(复杂)学。 用从易出用。 也就是面试造核, 实际工作 CURD。

传入一个对象

既然能够存放数组, 存放对象也没有问题。 接下来我们看看存放一个对象案例:

这里演示了两种情况, 一个是直接传入表达式(内联),另外一个是传入一个变量。查看效果:

还有一种方式就是使用 properties 进行赋值, 但是这种知道就行了,实际项目中不会这样使用。举例:

<blog-post v-bind:title="post2.title" 
					 v-bind:likes="post2.likes"
           v-bind:is-published="post2.isPublished">
</blog-post>

不做案例演示。


单向数据流

在这里我们说一下 Vue3 中使用 prop 时, 它们的数据流关系为: 单项下行绑定。 父级 prop 的更新会向下流动到子组件中, 但是子组件却不能影响父组件的数据变化。 这里主要是防止子组件意外的变更父级组件状态, 从而导致应用的数据流难以维护使用, 所以在这里实现的方式是子组件没有权利修改父组件传过来的数据, 但是可以请求父组件对原始数据进行修改。

并且父级组件发生变化时,子组件的所有 prop 值都将刷新为最新的值。这种情况下, 我们就不应该在一个子组件内部改变 prop。 并且如果你这样去写代码的时候, Vue 也会在浏览器的控制台发出警告。


如果你真的需要, 这里给出两种方案。 看你的实际使用中的情况而定。

  1. 子组件中定义局部变量, 用父级 prop 值赋值给子组件局部变量使用
  2. 在子组件中使用计算属性, 处理父级传过来的 prop 值。

先看第一种情况, 我这里纯粹就是为了演示而演示, 没有实际意义。定义了一个postShow 用来控制子组件的显示隐藏, 并在子元素中赋值给了另外一个变量, 内部修改变量, 不会影响父组件。


查看效果, 默认情况下:

点击显示, 显示内容。

这个时候, 我们单击内部的显示/隐藏。 发现内部的变量在发生变化, 父类并没有变化。


第二种是使用计算属性, 从使用程度上来说和第一种很类似。

把上面的代码修改成如下:

刷新查看效果。

也是一样的效果。因为计算属性的默认只读, 也就无法修改子组件的变量数据了。

但是这里需要注意两个问题:

第一: 在传入的对象是数组或者对象的情况下, 子组件的数据修改,会影响到父组件的状态。需要悉知。

第二:关于HTML 中的 attribute 名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名, 但是这个不包含在字符串模版里面。 具体可以看上面的参考例子。 自己尝试在做实际的案例时不要只做正确的,也写一些错误的案例。用单元测试的方式进行技术的学习是一个很好的方式。


prop 的验证

在传入 prop 的时候,可以在子组件中定义 prop 的数据类型或者叫做字段检验器。 做一些提示和约束的操作。

先看一个例子:

查看验证的效果:

因为这里我校验了 isPublished 为 Boolean 值类型, 但是传入的却是一个数值类型的, 所以后台有一个警告信息。这个作用就可以用在开发组件时对一些变量的时候做到完善的提示和校验。


校验的类型可以是下列原生类型之一:

  • String
  • Number
  • Boolean
  • Array
  • Object
  • Date
  • Function
  • Symbol


prop 属性告一段落, 接下来我们看看怎么来使用组件中的事件。再开一篇。 保证每篇文章的篇幅不要过长。

相关推荐

第十章:优化设计与自动化工作流(优化设计是)

以下重点讲解优化设计、自动化脚本编写以及与其他工具(如Python、优化算法库)的集成,提升CFD仿真的工程应用效率。目标:掌握参数化扫描、优化算法集成和批量任务管理,实现从单次模拟到自动化设计探索的...

安装python语言,运行你的第一行代码

#01安装Python访问Python官方(https://www.python.org/),下载并安装最新版本的Python。确保安装过程中勾选“Addpython.exetoPAT...

Python安装(python安装的库在哪个文件夹)

Windows系统1.安装python1.1下载Python安装包打开官方网站:https://www.python.org/downloads/点击"DownloadPython3.1...

比pip快100倍的Python包安装工具(python2.7.5安装pip)

简介uv是一款开源的Python包安装工具,GitHubstar高达56k,以性能极快著称,具有以下特性(官方英文原文):Asingletooltoreplacepip,pip-tool...

【跟着豆包AI学Python】Python环境的安装,编写第一个程序

最近几年,人工智能越来越走进人们的日常生活,国内各大公司都推出了自己的AI助手,例如:阿里旗下的通义千问、百度旗下的文心一言、腾讯的腾讯元宝、深度求索的deepseek等,元宝就是字节跳动公司推出的A...

Python3+ 变量命名全攻略:PEP8 规范 + 官方禁忌...

Python3+变量命名规则与约定详解一、官方命名规则(必须遵守)1.合法字符集变量名只能包含:大小写字母(a-z,A-Z)数字(0-9)下划线(_)2.禁止数字开头合法:user_age,...

Python程序打包为EXE的全面指南:从入门到精通

引言在Python开发中,将程序打包成可执行文件(EXE)是分发应用程序的重要环节。通过打包,我们可以创建独立的可执行文件,让没有安装Python环境的用户也能运行我们的程序。本篇文章将详细介绍如何使...

别再纸上谈兵了!手把手教你安装GraalVM,让你的代码瞬间起飞!

各位老铁们,是不是每次看到我吹嘘GraalVM的各种神迹,心里都痒痒的?想让自己的Java程序秒启动?想让Python脚本跑得比平时快好几倍?想体验一把多语言无缝协作的快感?但一想到要下载、配置、敲命...

纠结坏了!从 Python 3.8 升级到 3.14 真有必要吗?

点赞、收藏、加关注,下次找我不迷路"我电脑里装的Python3.8,现在都出3.14了,要不要赶紧升级啊?会不会像手机系统更新一样,越升级越卡?"相信很多刚入门的朋友都有类...

win10下python3.13.3最新版本解释器的下载与安装

一、python3.13.3下载官方下载地址:https://www.python.org/1.浏览器访问https://www.python.org/这个地址,进入python的网站,点击【Dowl...

Python简介与开发环境搭建详细教程

1.1Python简介与开发环境搭建详细教程一、Python语言简介1.Python的核心特点2.Python的应用领域表1.1Python主要应用领域领域典型应用常用库Web开发网站后端D...

python开发小游戏案例(python游戏开发入门经典教程)

#头条创作挑战赛#假设你正在开发一个小型游戏,需要实现角色移动、障碍物生成、碰撞检测等功能。你可以使用Python和Pygame库来开发这个游戏。输入以下命令来安装Pygame:pipinstall...

Python编程:从入门到实践 第十一、二 章 武装飞船

假设我们有一个名为AnonymousSurvey的类,用于收集匿名调查的答案。该类包含以下方法:classAnonymousSurvey:def__init__(self,questi...

「Python系列」python几个重要模块的安装(二)

一、python的pygame的安装:安装地址:https://www.cnblogs.com/charliedaifu/p/9938542.htmlpyagme包下载地址:https://down...

python如何绘制消消乐小游戏(python字母消消乐)

要开发一款消消乐的小游戏界面,我们可以使用Python的pygame库。首先需要安装pygame库,然后创建一个窗口,加载游戏素材,处理游戏逻辑,以及绘制游戏界面。以下是一个简单的消消乐游戏界面实现:...