博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【React系列】Props 验证
阅读量:5884 次
发布时间:2019-06-19

本文共 3966 字,大约阅读时间需要 13 分钟。

Props 验证使用 propTypes,它可以保证我们的应用组件被正确使用,React.PropTypes 提供很多验证器 (validator) 来验证传入数据是否有效。当向 props 传入无效数据时,JavaScript 控制台会抛出警告。

常见的验证器:

React.createClass({      propTypes: {        // 可以声明 prop 为指定的 JS 基本数据类型,默认情况,这些数据是可选的        optionalArray: React.PropTypes.array,        optionalBool: React.PropTypes.bool,        optionalFunc: React.PropTypes.func,        optionalNumber: React.PropTypes.number,        optionalObject: React.PropTypes.object,        optionalString: React.PropTypes.string,             // 可以被渲染的对象 numbers, strings, elements 或 array        optionalNode: React.PropTypes.node,             //  React 元素        optionalElement: React.PropTypes.element,             // 用 JS 的 instanceof 操作符声明 prop 为类的实例。        optionalMessage: React.PropTypes.instanceOf(Message),             // 用 enum 来限制 prop 只接受指定的值。        optionalEnum: React.PropTypes.oneOf(['News', 'Photos']),             // 可以是多个对象类型中的一个        optionalUnion: React.PropTypes.oneOfType([          React.PropTypes.string,          React.PropTypes.number,          React.PropTypes.instanceOf(Message)        ]),             // 指定类型组成的数组        optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),             // 指定类型的属性构成的对象        optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),             // 特定 shape 参数的对象        optionalObjectWithShape: React.PropTypes.shape({          color: React.PropTypes.string,          fontSize: React.PropTypes.number        }),             // 任意类型加上 `isRequired` 来使 prop 不可空。        requiredFunc: React.PropTypes.func.isRequired,             // 不可空的任意类型        requiredAny: React.PropTypes.any.isRequired,             // 自定义验证器。如果验证失败需要返回一个 Error 对象。不要直接使用 `console.warn` 或抛异常,        // 因为这样 `oneOfType` 会失效。        customProp: function(props, propName, componentName) {          if (!/matchme/.test(props[propName])) {            return new Error('Validation failed!');          }        }      }    });
注意: React.PropTypes 自 React v15.5 起已弃用。请使用 prop-types 库代替。
import PropTypes from '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,  // 任意类型的数据  requiredAny: PropTypes.any.isRequired,  // 你也可以指定一个自定义验证器。它应该在验证失败时返回  // 一个 Error 对象而不是 `console.warn` 或抛出异常。  // 不过在 `oneOfType` 中它不起作用。  customProp: function(props, propName, componentName) {    if (!/matchme/.test(props[propName])) {      return new Error(        'Invalid prop `' + propName + '` supplied to' +        ' `' + componentName + '`. Validation failed.'      );    }  },  // 不过你可以提供一个自定义的 `arrayOf` 或 `objectOf`   // 验证器,它应该在验证失败时返回一个 Error 对象。 它被用  // 于验证数组或对象的每个值。验证器前两个参数的第一个是数组  // 或对象本身,第二个是它们对应的键。  customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) {    if (!/matchme/.test(propValue[key])) {      return new Error(        'Invalid prop `' + propFullName + '` supplied to' +        ' `' + componentName + '`. Validation failed.'      );    }  })};

转载地址:http://jglix.baihongyu.com/

你可能感兴趣的文章
bootstrap 2
查看>>
Annotation研究的一些学习资料
查看>>
webpack资料
查看>>
DotNet加密方式解析--散列加密
查看>>
OpenSSL使用2(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12概念说明)(转)
查看>>
【前端】:HTML
查看>>
SSM框架——使用MyBatis Generator自动创建代码
查看>>
java数据库操作:JDBC的操作
查看>>
基于OpenCV的形态学开源库 V0.2
查看>>
在ubuntu下安装和配置vsftpd
查看>>
c#中结构体和类的比较
查看>>
Linux磁盘配额
查看>>
JQuery UI的拖拽功能
查看>>
数据驱动销售——个性化推荐引擎
查看>>
C语言标准库函数qsort那点小事
查看>>
HL7 CDA高级培训
查看>>
Android 调用照相机拍照
查看>>
linux的C获取shell执行返回的结果
查看>>
关于spring mybateis 定义resultType="java.util.HashMap"
查看>>
程序员怎么留住健康?
查看>>