20250314-vue-Props3

embedded/2025/3/28 14:23:25/

Props 校验

vue组件可以更细致地声明对传入的 props 的校验要求。比如类型声明,如果传入的值不满足类型要求,Vue会在浏览器控制台中抛出警告来提醒使用者。这在开发给其他开发者使用的组件时非常有用。

要声明对 props 的校验,可以向 props 选项提供一个带有 props 校验选项的对象,例如:

1 基础类型检查

子组件:

<template><text>{{aProp}}</text>
</template><script>export default {props:{//基础类型检查//(给出 'null' 和 'undefined' 值则会跳过任何类型检查)aProp:Number}}
</script><style>
</style>

父组件:

<template><Sub aProp="3"></Sub>
</template><script>import Sub from './Sub.vue'export default {components: {Sub,},data() {return {}}}
</script><style></style>

结果:

报错 [Vue warn]: Invalid prop: type check failed for prop "aProp". Expected Number with value 3, got String with value "3".

显示还是会显示

2 多种可能的类型

上面的例子,把子组件代码改成这样,就不会收到警告了,

javascript"><template><text>{{aProp}}</text>
</template><script>export default {props:{//多种可能类型aProp:[Number,String]}}
</script><style>
</style>

3 必传,且为 String 类型

子组件改成这样,

javascript"><template><text>{{aProp}}</text>
</template><script>export default {props:{//必传,且为 String 类型aProp:{type:String,required:true}}}
</script><style>
</style>

父组件不传,报错 Missing required prop: "aProp"

父组件传数字类型,也会报错,Invalid prop: type check failed for prop "aProp". Expected String with value "3", got Number with value 3.

注意带冒号才算传的数值类型3,不带冒号则表示传的是字符串3
<template><Sub :aProp="3"></Sub>
</template><script>import Sub from './Sub.vue'export default {components: {Sub,},data() {return {}}}
</script><style></style>

4 必传但可为 null 的字符串

上面3中如果传null,是会报错的,改成这样就不会,

<template><text>{{aProp}}</text>
</template><script>export default {props:{//必传但可为null的字符串aProp:{type:[String,null],required:true}}}
</script><style>
</style>

父组件:

<template><Sub :aProp="null"></Sub>
</template><script>import Sub from './Sub.vue'export default {components: {Sub,},data() {return {}}}
</script><style></style>

5 Number 类型的默认值

<template><text>{{aProp}}</text>
</template><script>export default {props:{//必传但可为null的字符串aProp:{type:Number,default:101}}}
</script><style>
</style>

6 对象类型的默认值

子组件:

<template><text>{{aProp.message}}</text>
</template><script>export default {props:{//对象类型的默认值aProp:{type: Object,// 对象或者数组应当用工厂函数返回// 工厂函数会收到组件所接收的原始 props 作为参数default(rawProps) {return {message:'子类默认'}}}}}
</script><style>
</style>

父组件:

<template><Sub :a-prop="{message:'父组件传入'}"></Sub>
</template><script>import Sub from './Sub.vue'export default {components: {Sub,},data() {return {}}}
</script><style></style>

如果父组件不传该属性,则显示:

7 自定义类型校验函数(不常用)

javascript">// 自定义类型校验函数// 完整的 props 作为第二个参数传入propG: {validator(value, props) {return ['success', 'warning', 'danger'].includes(value)}},

一些补充细节:

  • 所有 prop 默认都是可选的,除非声明了 required: true

  • 除 Boolean 外的未传递的可选 prop 将会有一个默认值 undefined

  • Boolean 类型的未传递 prop 将被转换为 false。这可以通过为它设置 default 来更改——例如,设置为 default:undefined 将与非布尔类型的 prop 的行为保持一致

  • 如果声明了 default 值,那么在 prop 的值被解析为 undefined 时,无论 prop 是未被传递还是显式指明的 undefined,都会改为 default 值

需要注意的是,prop 的校验是在组件实例被创建之前,所以实例的属性比如 data、computed 等将在 default 或 validator 函数中不可用。


http://www.ppmy.cn/embedded/173997.html

相关文章

性能测试之grafana展示jmeter测试指标与主机监控

性能测试之grafana展示jmeter测试指标与主机监控 背景 ​ 公司新的项目准备开展性能测试,之前性能监控主要使用的jmeter的插件jpgc-Transactions per Second 与 jpgc- Response Times Over Time 与 jpgc - Active Threads Over Time等等插件监控性能指标结果,PerfMon Metrics…

华为OD机试 - 仿LISP运算 - 逻辑分析(Java 2023 B卷 200分)

题目描述 LISPQ语言的唯一语法是括号必须配对,形如(OP P1 P2 ...),括号内元素由单个空格分隔。其中第一个元素OP为操作符,后续元素均为其参数,参数个数取决于操作符类型。当前OP类型为add/sub/mul/div(全小写),分别代表整数的加减乘除法。简单起见,所有OP参数个数均为…

pytorch小记(九):pytorch中创建指定形状的张量: torch.empty

pytorch小记&#xff08;九&#xff09;&#xff1a;pytorch中创建指定形状的张量: torch.empty 详细解释1. 基本功能2. 语法3. 示例代码示例 1&#xff1a;创建一个 5 的未初始化张量示例 2&#xff1a;创建一个 23 的未初始化张量示例 3&#xff1a;指定数据类型和设备 4. 注…

HTML5 Canvas 的俄罗斯方块游戏开发实践

基于 HTML5 Canvas 的俄罗斯方块游戏开发实践 这里写目录标题 基于 HTML5 Canvas 的俄罗斯方块游戏开发实践项目概述技术栈选择核心功能实现1. 游戏初始化2. 方块设计3. 碰撞检测4. 方块旋转5. 消行处理 性能优化项目难点与解决方案开发经验总结项目收获未来优化方向结语 项目概…

Spring、Spring Boot、Spring Cloud 的区别与联系

1. Spring 框架 定位&#xff1a;轻量级的企业级应用开发框架&#xff0c;核心是 IoC&#xff08;控制反转&#xff09; 和 AOP&#xff08;面向切面编程&#xff09;。 核心功能&#xff1a; 依赖注入&#xff08;DI&#xff09;&#xff1a;通过 Autowired、Component 等注解…

Opencv之计算机视觉一

一、环境准备 使用opencv库来实现简单的计算机视觉。 需要安装两个库&#xff1a;opencv-python和opencv-contrib-python&#xff0c;版本可以自行选择&#xff0c;注意不同版本的opencv中的某些函数名和用法可能不同 pip install opencv-python3.4.18.65 -i https://pypi.t…

低代码与在线教育系统源码:企业内训平台开发的新思路

近年来&#xff0c;低代码开发技术的兴起&#xff0c;为在线教育系统源码的快速搭建提供了新的可能。本文将探讨低代码与在线教育系统源码如何结合&#xff0c;帮助企业打造更高效、更智能的内训平台。 一、企业内训平台的发展趋势 当前&#xff0c;企业内训平台主要呈现以下趋…

【图论】并查集的学习和使用

目录 并查集是什么&#xff1f; 举个例子 组成 父亲数组&#xff1a; find函数&#xff1a; union函数&#xff1a; 代码实现&#xff1a; fa[] 初始化code: find code&#xff1a; 递归实现: 非递归实现: union code : 画图模拟&#xff1a; 路径压缩&#xff1a…