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 相关文章推荐
jQuery Div中加载其他页面的实现代码
Feb 27 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
javascript校验价格合法性实例(必须输入2位小数)
May 05 Javascript
JavaScript中this详解
Sep 01 Javascript
通过jsonp获取json数据实现AJAX跨域请求
Jan 22 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
Jul 17 jQuery
初探JavaScript 面向对象(推荐)
Sep 03 Javascript
JavaScript Date对象应用实例分享
Oct 30 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 Javascript
vue实现的下拉框功能示例
Jan 29 Javascript
微信小程序制作扭蛋机代码实例
Sep 24 Javascript
Vue中rem与postcss-pxtorem的应用详解
Nov 20 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 PDO函数库详解
2010/04/27 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
小程序实现搜索框
2020/06/19 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
Python协程的用法和例子详解
2017/09/09 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
python求质数的3种方法
2018/09/28 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
草船借箭教学反思
2014/02/03 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
物流管理专业自荐信
2014/06/23 职场文书
委托书如何写
2014/08/30 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
Python中递归以及递归遍历目录详解
2021/10/24 Python
Nginx实现负载均衡的项目实践
2022/03/18 Servers
bose降噪耳机音能消除人声吗
2022/04/19 数码科技