PropTypes验证器
PropTypes用于对类型的验证,从而更加容易捕获bug。在React v15.5之前,它内置React.PropTypes函数帮助解决,之后放弃支持,采用prop-types库定义。
import PropTypes from 'prop-types';
class Example extends React.Component { // 基本使用
render() {
return <div>{this.props.name}{this.props.user}</div>;
}
}
Example.propTypes = { // 驼峰式的写法,与下面不同
name: PropTypes.string,
user: PropTypes.string.isRequired // 假如果类中并没有user的属性,那么会报出警告,而上一句则不会
};
下面是常用和不常用的一些验证写法,从官网获取:
 import PropTypes from 'prop-types';
 MyComponent.propTypes = {
   // 你可以声明一个 prop 是一个特定的 JS 原始类型。
   // 默认情况下,这些都是可选的。
   optionalArray: PropTypes.array,
   optionalBool: PropTypes.bool,
   optionalFunc: PropTypes.func,
   optionalNumber: PropTypes.number,
   optionalObject: PropTypes.object,
   optionalString: PropTypes.string,
   optionalSymbol: PropTypes.symbol,
   // 任何东西都可以被渲染:numbers, strings, elements,或者是包含这些类型的数组(或者是片段)。
   optionalNode: PropTypes.node,
   // 一个 React 元素。
   optionalElement: PropTypes.element,
   // 你也可以声明一个 prop 是类的一个实例。
   // 使用 JS 的 instanceof 运算符。
   optionalMessage: PropTypes.instanceOf(Message),
   // 你可以声明 prop 是特定的值,类似于枚举
   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
   }),
   // 你可以使用 `isRequired' 链接上述任何一个,以确保在没有提供 prop 的情况下显示警告。
   requiredFunc: PropTypes.func.isRequired,
   // 任何数据类型的值
   requiredAny: PropTypes.any.isRequired,
   // 你也可以声明自定义的验证器。如果验证失败返回 Error 对象。不要使用 `console.warn` 或者 throw ,
   // 因为这不会在 `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.'
       );
     }
   })
 };
除了父组件给传递属性和方法外,子组件内部默认可以指定值,而此时propTypes的类型检测依然生效,因为它是在defaultProps之后进行的:
import PropTypes from 'prop-types';
class Example extends React.Component {
render() {
return <div>{this.props.name}{this.props.user}</div>;
}
}
Example.defaultProps = {
name: 'eric',
user: 'ppp'
};
Example.propTypes = {
name: PropTypes.string,
user: PropTypes.string.isRequired
};
PropTypes验证器的更多相关文章
- 9、 Struts2验证(声明式验证、自定义验证器)
		
1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...
 - linux上使用google身份验证器(简版)
		
系统:centos6.6 下载google身份验证包google-authenticator-master(其实只是一个.zip文件,在windwos下解压,然后传进linux) #cd /data/ ...
 - vue-validator(vue验证器)
		
官方文档:http://vuejs.github.io/vue-validator/zh-cn/index.html github项目地址:https://github.com/vuejs/vue-v ...
 - 原生JS 表单提交验证器
		
转载:http://www.cnblogs.com/sicd/p/4613628.html 一.前言 最近在开发一个新项目,需要做登陆等一系列的表单提交页面.在经过“缜密”的讨论后,我们决定 不用外部 ...
 - yii框架中验证器声明一组内置验证器可以使用短名称引用
		
1.内置验证器的短名称分别有: boolean: yii\validators\BooleanValidator captcha: yii\captcha\CaptchaValidator compa ...
 - 通过Google身份验证器加强Linux帐户安全
		
下载Google的身份验证模块: # wget https://google-authenticator.googlecode.com/files/libpam-google-authenticato ...
 - 谷歌身份验证器加强Linux帐户安全
		
下载 Google的身份验证模块 # wget https://google-authenticator.googlecode.com/files/libpam-google-authenticato ...
 - JFinal极速开发实战-业务功能开发-通用表单验证器
		
提交表单数据时,需要经过前端的验证才能提交到后台,而后台的验证器再做一道数据的校验,成功之后才能进入action进行业务数据的处理. 在表单数据的验证中,数据类型的验证还是比较固定的.首先是对录入数据 ...
 - yii 验证器和验证码
		
http://www.yiiframework.com/doc/api/1.1/CCaptcha http://www.cnblogs.com/analyzer/articles/1673015.ht ...
 
随机推荐
- 外网如何访问web项目holer实现篇
			
外网访问WEB 内网主机上安装了WEB服务器,只能在局域网内访问,怎样从公网也能访问本地WEB应用? 本文将介绍使用holer实现的具体步骤. 1. 准备工作 1.1 安装Java 1.7及以上版本 ...
 - C#读写三菱PLC和西门子PLC数据 使用TCP/IP 协议
			
本文将使用一个Github开源的组件库技术来读写三菱PLC和西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能 ...
 - Python全栈之路----常用模块----random模块
			
程序中有很多地方需要用到随机字符,比如登陆网站的随机验证码,通过random模块可以很容易生成随机字符串. >>> import random >>> random ...
 - solr增加中文分析器
			
我的solr版本是5.3.0 1将jar包ik-analyzer-solr5-5.x.jar放入sor的web-inf的lib里面 2 在web-inf下面新建classes目录,再新增三个配置文件: ...
 - psql备份和恢复(ubuntu)
			
备份 sudo pg_dump -U username -f filename.sql dbname 恢复 psql -U username -f filename.sql dbname -- ...
 - 数组排序自定义comparator()
			
案例1:现在有一个普通数组arr = [3,1,2,4,5,6,8,0,1]; 自定义一个排序方法: function createComparator(){ return function (obj ...
 - python中表示False的一些内置对象
			
By default, an object is considered true unless its class defines either a __bool__() method that re ...
 - Dynamics 365 CRM Free up storage 清理Dynamics 365 CRM的空间
			
Dynamics 365 CRM 的空间是要买的. 但是很多情况下用户可以去清理CRM从而达到给空间减重的方法 两大使用DB空间大的功能 1. Audit log 审计记录 审计记录是用来记录各个fi ...
 - <a>标签里的函数事件写法的实战建议
			
如果在实际应用中确实是要用到标签来响应onclick事件的, 那么就建议使用下面三种方法 <a href="javascript:void(0);" onclick=&quo ...
 - go环境变量与sublime Text3开发工具
			
环境:win7 1:下载安装包 (下载太慢了,上传至百度网盘了) 链接:https://pan.baidu.com/s/10wHOR01mW-kjdkynqu1F-g 密码:kv71 2:安装 ...