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

Vue.js 的组件 prop 属性详解

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

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

相关推荐

MySQL修改密码_mysql怎么改密码忘了怎么办

拥有原来的用户名账户的密码mysqladmin-uroot-ppassword"test123"Enterpassword:【输入原来的密码】忘记原来root密码第一...

数据库密码配置项都不加密?心也太大了吧!

先看一份典型的配置文件...省略...##配置MySQL数据库连接spring.datasource.driver-class-name=com.mysql.jdbc.Driverspr...

Linux基础知识_linux基础入门知识

系统目录结构/bin:命令和应用程序。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev:dev是Device(设备)的缩写,该目录...

MySQL密码重置_mysql密码重置教程

之前由于修改MySQL加密模式为mysql_native_password时操作失误,导致无法登陆MySQL数据库,后来摸索了一下,对MySQL数据库密码进行重置后顺利解决,步骤如下:1.先停止MyS...

Mysql8忘记密码/重置密码_mysql密码忘了怎么办?

Mysql8忘记密码/重置密码UBUNTU下Mysql8忘记密码/重置密码步骤如下:先说下大概步骤:修改配置文件,使得用空密码可以进入mysql。然后置当前root用户为空密码。再次修改配置文件,不能...

MySQL忘记密码怎么办?Windows环境下MySQL密码重置图文教程

有不少小白在使用Windows进行搭建主机的时候,安装了一些环境后,其中有MySQL设置后,然后不少马大哈忘记了MySQL的密码,导致在一些程序安装及配置的时候无法进行。这个时候怎么办呢?重置密码呗?...

10种常见的MySQL错误,你可中招?_mysql常见错误提示及解决方法

【51CTO.com快译】如果未能对MySQL8进行恰当的配置,您非但可能遇到无法顺利访问、或调用MySQL的窘境,而且还可能给真实的应用生产环境带来巨大的影响。本文列举了十种MySQL...

Mysql解压版安装过程_mysql解压版安装步骤

Mysql是目前软件开发中使用最多的关系型数据库,具体安装步骤如下:第一步:Mysql官网下载最新版(mysql解压版(mysql-5.7.17-winx64)),Mysql官方下载地址为:https...

MySQL Root密码重置指南:Windows新手友好教程

如果你忘记了MySQLroot密码,请按照以下简单步骤进行重置。你需要准备的工具:已安装的MySQL以管理员身份访问命令提示符一点复制粘贴的能力分步操作指南1.创建密码重置文件以管理员...

安卓手机基于python3搜索引擎_python调用安卓so库

环境:安卓手机手机品牌:vivox9s4G运行内存手机软件:utermux环境安装:1.java环境的安装2.redis环境的安装aptinstallredis3.elasticsearch环...

Python 包管理 3 - poetry_python community包

Poetry是一款现代化的Python依赖管理和打包工具。它通过一个pyproject.toml文件来统一管理你的项目依赖、配置和元数据,并用一个poetry.lock文件来锁定所有依赖的精...

Python web在线服务生产环境真实部署方案,可直接用

各位志同道合的朋友大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题最近经...

官方玩梗:Python 3.14(πthon)稳定版发布,正式支持自由线程

IT之家10月7日消息,当地时间10月7日,Python软件基金会宣布Python3.14.0正式发布,也就是用户期待已久的圆周率(约3.14)版本,再加上谐音梗可戏称为π...

第一篇:如何使用 uv 创建 Python 虚拟环境

想象一下,你有一个使用Python3.10的后端应用程序,系统全局安装了a2.1、b2.2和c2.3这些包。一切运行正常,直到你开始一个新项目,它也使用Python3.10,但需要...

我用 Python 写了个自动整理下载目录的工具

经常用电脑的一定会遇到这种情况:每天我们都在从浏览器、微信、钉钉里下各种文件,什么截图、合同、安装包、临时文档,全都堆在下载文件夹里。起初还想着“过两天再整理”,结果一放就是好几年。结果某天想找一个发...