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编写widget的一些技巧分享
Oct 28 Javascript
jquery操作select option 的代码小结
Jun 21 Javascript
jqTransform form表单美化插件使用方法
Jul 05 Javascript
js动态切换图片的方法
Jan 20 Javascript
javascript笛卡尔积算法实现方法
Apr 08 Javascript
jQuery多文件异步上传带进度条实例代码
Aug 16 Javascript
JS中Array数组学习总结
Jan 18 Javascript
vuejs父子组件之间数据交互详解
Aug 09 Javascript
jquery获取链接地址和跳转详解(推荐)
Aug 15 jQuery
mpvue中配置vuex并持久化到本地Storage图文教程解析
Mar 15 Javascript
JS中DOM元素的attribute与property属性示例详解
Sep 04 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
Apr 11 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数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
2011/08/23 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
JSON取值前判断
2014/12/23 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
用python制作游戏外挂
2018/01/04 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
keras 权重保存和权重载入方式
2020/05/21 Python
浅谈Python中的字符串
2020/06/10 Python
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
电子商务个人自荐信
2013/12/12 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书