Vue要求任何传递给组件的数据都被显式声明为props。此外,它还提供了一个强大的内置机制来验证此类数据。这就像组件和消费者之间的合同一样,确保组件按预期使用。让我们探索这个强大的工具,它可以帮助我们减少错误并增加我们在开发和调试过程中的信心。1.基础知识1.1原始类型验证原始类型就像为原始类型构造函数设置类型选项一样简单。exportdefault{props:{//基本类型检查//(`null`和`undefined`值将允许任何类型)propA:Number,//多种可能的类型propB:[String,Number],//必需的字符串propC:{type:String,required:true},//Number有默认值propD:{type:Number,default:100},}}1.2复杂类型复杂类型也可以用同样的方式验证。exportdefault{props:{//具有默认值的对象propE:{type:Object,//对象或数组默认值必须从工厂函数中获取。此函数接收原始组件接收的props作为参数。default(rawProps){return{message:'hello'}}},//有默认值的数组propF:{type:Array,default(){return[]}},//有默认值的函数propG:{type:Function,//与默认对象或数组不同,这不是工厂函数-这是用作默认值的函数default(){return'Defaultfunction'}}}}type可以是以下值之一:NumberStringBooleanArrayObjectDateFunctionSymbol另外,type也可以是自定义类或构造函数,断言会通过instanceof检查。例如,给定以下类:classPerson{constructor(firstName,lastName){this.firstName=firstNamethis.lastName=lastName}}你可以使它成为这样的道具类型。exportdefault{props:{author:Person}}2.高级验证2.1Validator函数props支持使用验证器函数,它接受props的原始值,必须返回一个布尔值来判断props是否有效。//Customvalidatorfunctionprop:{validator(value){//该值必须匹配这些字符串之一return['success','warning','danger'].includes(value)}},2.2使用枚举有时你想要将值缩小到特定的集合,这可以通过像这样伪造一个枚举来实现:exportconstPosition=Object.freeze({TOP:"top",RIGHT:"right",BOTTOM:"bottom",左:“左”});可以导入并在验证器中使用,或作为默认值。
