当前位置: 首页 > Web前端 > vue.js

Reactpropstypevalidation,vuepropsvalidation

时间:2023-04-01 00:19:22 vue.js

react使用第三方prop-types进行类型验证查看资料:ReacttypecheckingPropTypeshasbeendeprecatedsinceReactv15.5,prop-typesrecentlyuseReact'stypecheckingWhenusingPropTypes,我遇到了一个错误:TypeError:Cannotreadproperty'array'ofundefined。看了下自己的React版本:"react":"^16.2.0",谷歌搜索了一下,结果是:react的类型PropTypes来自ReactDeprecatedsincev15.5,请使用prop-types参考:https://doc.react-china.org/docs/typechecking-with-proptypes.htmlimportPropTypesfrom'prop-types';MyComponent.propTypes={//你可以将属性声明为以下JS原生类型optionalArray:PropTypes.array,optionalBool:PropTypes.bool,optionalFunc:PropTypes.func,optionalNumber:PropTypes.number,optionalObject:PropTypes.object,optionalString:PropTypes.string,optionalSymbol:PropTypes.symbol,//任何可以渲染的元素(包括数字,字符串,子元素或数组)。optionalNode:PropTypes.node,//一个React元素optionalElement:PropTypes.element,//你也可以将属性声明为某个类的实例,这里使用JS的//instanceof运算符。optionalMessage:PropTypes.instanceOf(Message),//您也可以将属性值限制为特定值之一optionalEnum:PropTypes.oneOf(['News','Photos']),//将其限制为枚举类型其中一个对象optionalUnion:PropTypes.oneOfType([PropTypes.string,PropTypes.number,PropTypes.instanceOf(Message)]),//指定元素类型的数组optionalArrayOf:PropTypes.arrayOf(PropTypes.number),//一个指定类型的对象optionalObjectOf:PropTypes.objectOf(PropTypes.number),//指定属性及其类型的对象optionalObjectWithShape:PropTypes.shape({color:PropTypes.string,fontSize:PropTypes.number}),//你也可以给任何PropTypes属性加上`isRequired`//后缀,这样如果没有提供这个属性的父组件,就会打印警告信息requiredFunc:PropTypes.func.isRequired,//anytypeofdatarequiredAny:PropTypes.any.isRequired,//你也可以指定自定义验证器。它应该返回//一个错误对象而不是`console.warn`或在验证失败时抛出异常。//但它在`oneOfType`中不起作用。customProp:function(props,propName,componentName){if(!/matchme/.test(props[propName])){returnnewError('Invalidprop`'+propName+'`suppliedto'+'`'+componentName+'`。验证失败。');}},//但你可以提供一个自定义的`arrayOf`或`objectOf`//验证器,当验证失败时它应该返回一个错误对象。它用于//验证数组或对象的每个值。验证器的前两个参数中的第一个是数组//或对象本身,第二个是它们对应的键。customArrayProp:PropTypes.arrayOf(function(propValue,key,componentName,location,propFullName){if(!/matchme/.test(propValue[key])){returnnewError('提供的无效道具`'+propFullName+'`to'+'`'+componentName+'`。验证失败。');}})};vue自带props验证https://v3.cn.vuejs.org/guide/component-props.html#%E7%B1%BB%E5%9E%8B%E6%A3%80%E6%9F%A5app。component('my-component',{props:{//基本类型检查(`null`和`undefined`值将通过任何类型验证)propA:Number,//多种可能的类型propB:[String,Number],//requiredstringpropC:{type:String,required:true},//带默认值numberpropD:{type:Number,default:100},//带默认值的对象propE:{type:Object,//默认值forobjectorarraymustbereturnedfromafactoryfunctiondefault(){return{message:'hello'}}},//自定义验证函数propF:{validator(value){//这个值必须匹配以下字符串之一返回['成功','警告','危险'].includes(value)}},//具有默认值的函数propG:{type:Function,//与对象或数组默认值不同,这不是工厂函数-这是用作默认值的函数default(){return'默认函数'}}}})