React教程之Props验证的具体用法(Props Validation)


Posted in Javascript onSeptember 04, 2017

Props验证对于组件的正确使用是一种非常有用的方式。它可以避免随着你的应用的程序越来越复杂从而出现很多的bug和问题。并且,它还可以是你的程序变得更易读。

那如何对Props进行验证呢,其实很简单,React为我们提供了PropTypes以供验证使用。当我们向Props传入的数据无效(也就是向Props传入的数据类型和验证的数据类型不符)就会在控制台发出警告信息。

看下面的例子

var Propsva = React.createClass({
  propTypes: {
    optionalArray: React.PropTypes.array,
    optionalBool: React.PropTypes.bool,
    optionalFunc: React.PropTypes.func,
    optionalNumber: React.PropTypes.number,
    optionalObject: React.PropTypes.object,
    optionalString: React.PropTypes.string,
  },
  getDefaultProps:function(){
    return {
      optionalArray: ['onmpw.com','——迹忆博客'],
      optionalBool: true,
      optionalFunc: function (arg) {
        console.log(arg);
      },
      optionalNumber: 3,
      optionalObject: {
        object1: "objectvalue1",
        object2: "objectvalue2",
        object3: "objectvalue3",
      },
      optionalString: "My Onmpw",
    };
  },
  render:function(){
    return (
      <div>
        <h3>Array:{this.props.optionalArray}</h3>
        <h3>Bool:{this.props.optionalBool}</h3>
        <h3 onClick={this.props.optionalFunc}>Func:click</h3>
        <h3>Number:{this.props.optionalNumber}</h3>
        <h3>Object:{this.props.optionalObject.object1}</h3>
        <h3>Object:{this.props.optionalObject.object2}</h3>
        <h3>Object:{this.props.optionalObject.object3}</h3>
        <h3>String:{this.props.optionalString}</h3>
      </div>
    );
  }
});
ReactDOM.render(
  <Propsva />,
  document.getElementById('content')
);

当然,上面这个例子是没有错误的。下面我们将上面的例子进行修改

getDefaultProps:function(){
  return {
    optionalArray: 'onmpw.com——迹忆博客',
    optionalBool: true,
    optionalFunc: function (arg) {
      console.log(arg);
    },
    optionalNumber: 3,
    optionalObject: {
      object1: "objectvalue1",
      object2: "objectvalue2",
      object3: "objectvalue3",
    },
    optionalString: "My Onmpw",
  };
},

然后,我们会在控制台中发现有如下的警告

Warning: Failed propType: Invalid prop `optionalArray` of type `string` supplied to `Propsva`, expected `array`.

这是一种情况,验证Props的数据类型。还有一种情况就是验证Props是否有值。看下面的代码

propTypes: {
  optionalArray: React.PropTypes.array.isRequired,
  optionalBool: React.PropTypes.bool.isRequired,
  optionalFunc: React.PropTypes.func,
  optionalNumber: React.PropTypes.number,
  optionalObject: React.PropTypes.object,
  optionalString: React.PropTypes.string,
},

在React.PropTypes.array和React.PropTypes.bool后面加上isRequired,表示optionalArray和optionalBool两项是必须有值的

getDefaultProps:function(){
  return {
    optionalFunc: function (arg) {
      console.log(arg);
    },
    optionalNumber: 3,
    optionalObject: {
      object1: "objectvalue1",
      object2: "objectvalue2",
      object3: "objectvalue3",
    },
    optionalString: "My Onmpw",
  };
},

在上面代码中我们将optionalArray和optionalBool去掉,然后再去浏览器中运行代码,会发现控制台报如下的错误

Warning: Failed propType: Required prop `optionalArray` was not specified in `Propsva`.
Warning: Failed propType: Required prop `optionalBool` was not specified in `Propsva`.

当然,上面只是简单的两种情况。对于Props的验证,还有很多的东西,验证的形式也有很多,具体我们可以参考React官方文档。

这里我们有一个知识点需要说明一下,就是getDefaultProps。这是默认给Props赋值。看下面的代码

var ComponentDefaultProps = React.createClass({
  getDefaultProps: function() {
    return {
      value: 'Default Value'
    };
  },
  render:function(){
    return (
      <div>{this.props.value}</div>
    )
  }
});
ReactDOM.render(
  <ComponentDefaultProps />,
  document.getElementById('content')
);

getDefaultProps()可以保证,当父级组件没有传入Props的时候,可以保证当前组件有默认的Props的值。需要注意的是,getDefaultProps的返回结果是会被缓存起来的。因此,我们可以直接使用Props,而没有必要再手动编写一些没有意义的重复的代码。

对于Props的验证,就介绍到这里。希望本文对大家有所帮助。也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript学习笔记二 之 变量
Dec 15 Javascript
js查错流程归纳
May 04 Javascript
JavaScript中的细节分析
Jun 30 Javascript
javascript小数四舍五入多种方法实现
Dec 23 Javascript
javascript修改IMG标签的src问题
Mar 28 Javascript
2则自己编写的jQuery特效分享
Feb 26 Javascript
AngularJs解决跨域问题案例详解(简单方法)
May 19 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
Nov 17 Javascript
Javascript中call,apply,bind方法的详解与总结
Dec 12 Javascript
JavaScript中递归实现的方法及其区别
Sep 12 Javascript
JavaScript时间与时间戳的转换操作实例分析
Dec 07 Javascript
微信小程序实现页面监听自定义组件的触发事件
Nov 01 Javascript
VueJS组件之间通过props交互及验证的方式
Sep 04 #Javascript
vue中component组件的props使用详解
Sep 04 #Javascript
React-Native中props具体使用详解
Sep 04 #Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
Sep 04 #Javascript
JS与HTML结合实现流程进度展示条思路详解
Sep 03 #Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
Sep 03 #Javascript
JS实现页面内跳转的简单代码
Sep 03 #Javascript
You might like
php实现的ping端口函数实例
2014/11/12 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
Javascript的一种模块模式
2008/03/22 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
jquery中this的使用说明
2010/09/06 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
Python交互环境下实现输入代码
2018/06/22 Python
python实现图片筛选程序
2018/10/24 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
python hash每次调用结果不同的原因
2019/11/21 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
程序员跳槽必看面试题总结
2013/06/28 面试题
绩效专员岗位职责
2013/12/02 职场文书
玩具公司的创业计划书
2013/12/31 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
节能减耗标语
2014/06/21 职场文书
师德承诺书
2015/01/20 职场文书
运动会主持词大全
2015/07/02 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书