Prop 校验

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

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

defineProps({
  // 基础类型检查
  // (给出 `null` 和 `undefined` 值则会跳过任何类型检查)
  propA: Number,
  // 多种可能的类型
  propB: [String, Number],
  // 必传,且为 String 类型
  propC: {
    type: String,
    required: true
  },
  // Number 类型的默认值
  propD: {
    type: Number,
    default: 100
  },
  // 对象类型的默认值
  propE: {
    type: Object,
    // 对象或数组的默认值
    // 必须从一个工厂函数返回。
    // 该函数接收组件所接收到的原始 prop 作为参数。
    default(rawProps) {
      return { message: 'hello' }
    }
  },
  // 自定义类型校验函数
  // 在 3.4+ 中完整的 props 作为第二个参数传入
  propF: {
    validator(value, props) {
      // The value must match one of these strings
      return ['success', 'warning', 'danger'].includes(value)
    }
  },
  // 函数类型的默认值
  propG: {
    type: Function,
    // 不像对象或数组的默认,这不是一个
    // 工厂函数。这会是一个用来作为默认值的函数
    default() {
      return 'Default function'
    }
  }
})

一些补充细节:

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

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

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

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

当 prop 的校验失败后,Vue 会抛出一个控制台警告 (在开发模式下)。

如果使用了基于类型的 prop 声明 ,Vue 会尽最大努力在运行时按照 prop 的类型标注进行编译。举例来说,defineProps<{ msg: string }> 会被编译为 { msg: { type: String, required: true }}

运行时类型检查​

校验选项中的 type 可以是下列这些原生构造函数:

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

另外,type 也可以是自定义的类或构造函数,Vue 将会通过 instanceof 来检查类型是否匹配。例如下面这个类:

class Person {
  constructor(firstName, lastName) {
    this.firstName = firstName
    this.lastName = lastName
  }
}
可以将其作为一个 prop 的类型:
defineProps({
  author: Person
})

Vue 会通过 instanceof Person 来校验 author prop 的值是否是 Person 类的一个实例。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows 系统使用Jenkins 实现CI一键打包部署操作

一 下载安装jenkins jenkins 中文官网链接: 下载地址 点击下载&#xff0c;完成后是一个.msi后缀的安装文件&#xff0c;双击安装 安装和普通软件一样&#xff0c;一路next&#xff0c;安装路径自己设置一下&#xff0c;默认是C盘&#xff0c;我C盘不够用了&#xff0c;设置…

【C++基础】this指针

一&#xff0c;this指针引入 不同对象调用相同函数时 &#xff0c;打印出来的值不一样&#xff0c;为什么&#xff1f; 这就隐含了一个this指针。this指针又叫隐含的this指针。&#xff08;不能显示写&#xff0c;但能显示用&#xff09; 注&#xff1a;1&#xff0c;红色部…

企业计算机服务器中了rmallox勒索病毒怎么处理,rmallox勒索病毒解密恢复

网络在为企业提供便利的同时&#xff0c;也为企业的数据安全带来严重威胁。随着网络技术的不断发展&#xff0c;越来越多的企业利用网络开展各项工作业务&#xff0c;网络数据安全问题&#xff0c;一直成为企业关心的主要话题&#xff0c;但网络威胁随着网络技术的不断成熟&…

《Fundamentals of Power Electronics》——一些常用变换器的正则电路参数值

对于理想的CCM PWM dc-dc转换器&#xff0c;其包含一个电感和电容&#xff0c;正则模型有效的低通滤波器需要包含一个电感和一个电容。正则模型简化为如下图所示。 假设电容与负载直接相连。基础的buck、boost和buck-boost转换器的参数值如下表所示。 该模型可以用传统的线性电…

Leetcode—1652. 拆炸弹【简单】

2024每日刷题&#xff08;127&#xff09; Leetcode—1652. 拆炸弹 实现代码 class Solution { public:vector<int> decrypt(vector<int>& code, int k) {int codeSize code.size();vector<int> ans(codeSize, 0);if(k 0) {return ans;}if(k > 0)…

【Linux】命令行参数和环境变量

目录 一、命令行参数 1.1 main函数的参数 1.2 命令行参数 二、环境变量 2.1 概念 2.2 查看和设置环境变量 2.2.1 查看环境变量 2.2.2 设置环境变量 2.2.3 设置PATH环境变量 2.2.4 环境变量表 2.2.5 本地变量和环境变量的区别 2.2.6 内建命令和常规命令 2.3 环境变…

新人0基础拼多多入门,纯小白快速入门多多(21节课)

课程内容&#xff1a; 1 店铺体系说明 .mp4 2 ㄠ衬雛饯铺运营雷区 ,mp4 3 店铺领航员 .mp4 4 店铺设置及管理 ,mp4 5 多多客服设置,mp4 6 店铺资金中心 .mp4 7 店铺运营小工具 ,mp4 8 售后及商品管理,mp4 9 发布机会商品.mp4 10 店铺营销 .mp4 11 产品类型 .mp4 12…

速锐得深入研究比亚迪E5电控系统及BCU数据及DBC控制策略

新能源汽车中比亚迪作为世界品牌的佼佼者&#xff0c;其E5车型凭借出色的电控系统成为了市场上的一颗璀璨明星。比亚迪E5电控系统不仅体现了技术的先进性&#xff0c;更是智能化、高效率的代名词&#xff0c;它如同一位智慧的指挥官&#xff0c;精确地掌控着汽车的每一个动作&a…

VGA项目:联合精简帧+双fifo+sobel算法 实现VGA显示(未完)

前言&#xff1a;该项目实际上是在很多基础的小练习上合成起来的&#xff0c;例如涉及到uart&#xff08;rs232&#xff09;的数据传输、双fifo流水线操作、VGA图像显示&#xff0c;本次内容在此基础上又增添了sobel算法&#xff0c;能实现图像的边沿监测并VGA显示。 文章目录…

深度学习之基于Vgg16卷积神经网络乳腺癌诊断系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于VGG16卷积神经网络的乳腺癌诊断系统项目是一个结合深度学习技术和医学图像处理的创新项目&#xff0c;旨在提高…

JetPack之ViewModel+LiveData

目录 一、概述二、LiveData 使用2.1 创建 LiveData 对象2.2 观察 LiveData 对象2.3 更新 LiveData 对象 三、编写 LiveData Demo3.1 不使用 LiveData3.2 使用 MutableLiveData3.3 使用 MediatorLiveData3.3.1 监听 2 个数据源的变化3.3.2 编写模拟 2 个数据源更新的代码 四、Vi…

奇门辅助软件v2024.5

废话不说&#xff0c;先上链接 链接&#xff1a;https://pan.baidu.com/s/1_i11lMx4P_vrTs-6lpWoHA?pwd8v1m 提取码&#xff1a;8v1m 功能介绍 【宫内信息】是点击宫内某属性时显示的宫内基本信息。 【古籍宝鉴】是《御定奇门宝鉴》里的对应时局内容&#xff0c;但差补法置…

YashanDB与帆软信创商业智能软件完成兼容互认证

近日&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB与帆软信创商业智能软件&#xff08;V6.0&#xff09;顺利完成兼容性互认证&#xff0c;经严格测试&#xff0c;双方产品能够相互兼容&#xff0c;稳定运行。 崖山数据库系统YashanDB是深圳计算科学研究院自主研发设计…

XSS Challenges 靶场通关解析

前言 XSS Challenges&#xff08;跨站脚本攻击挑战&#xff09;是一种用于学习和测试跨站脚本&#xff08;XSS&#xff09;漏洞的实验性平台。这些挑战旨在帮助安全研究人员和开发人员了解XSS漏洞的工作原理、检测方法和防御技巧。 通常&#xff0c;XSS Challenges平台提供一…

vite创建vue项目启动时域名为127.0.0.1修改为localhost不生效——问题解决

今天偶然间想起来年前整的一套vue3的框架&#xff0c;索性跑了一下&#xff0c;结果发现运行后地址为127.0.0.1而非localhost&#xff0c;所以想把域名改一下 找到vite.config.js文件中的export default defineConfig&#xff0c;在server中写入host:localhost 然后通过npm ru…

3d设计网站有哪些(2)?渲染100邀请码1a12

上次介绍了了几个设计网站&#xff0c;这次我们接着介绍。 1、Archive 3D Archive 3D是一个简单庞大的模型下载网站&#xff0c;可以下载的类型有家具、设备、飞行装备、门窗、厨房等。 2、3D Warehouse 3D Warehouse是预制3D模型网站&#xff0c;能与SketchUp无缝协作&…

软件杯 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…

EFDC模型安装及建模方法;在排污口论证、水质模拟、地表水环评、地表水水源地划分、水环境容量计算等领域中的应用

目录 专题一 EFDC软件安装 专题二 EFDC模型讲解 专题三 一维河流模拟实操 专题四 建模前处理 专题五 EFDC网格剖分介绍 专题六 EFDC二维湖库水动力模拟/非保守染色剂模拟 专题七 EFDC水质模型参数及原理介绍 专题八 EFDC一、二、三维湖库水质模拟 专题九 基于EFDC的地…

Aigtek射频功率放大器的主要功能是什么

射频功率放大器是一种专门用于放大射频信号功率的电子器件&#xff0c;它在无线通信、雷达系统、卫星通信等射频应用中起着至关重要的作用。下面将详细介绍射频功率放大器的主要功能。 信号放大&#xff1a;射频功率放大器的主要功能之一就是将传入的射频信号放大到所需的功率水…

使用 FFmpeg 从音视频中提取音频

有时候我们需要从视频文件中提取音频&#xff0c;并保存为一个单独的音频文件&#xff0c;我们可以借助 FFmpeg 来完成这个工作。 一、提取音频&#xff0c;保存为 mp3 文件: 要使用 FFmpeg 从音视频文件中提取音频&#xff0c;并将 ACC 编码的音频转换为 MP3 格式&#xff0…
最新文章