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源码不错的工具
Dec 26 Javascript
node.js中的path.isAbsolute方法使用说明
Dec 08 Javascript
Javascript中实现trim()函数的两种方法
Feb 04 Javascript
jQuery简单几行代码实现tab切换
Mar 10 Javascript
javascript制作幻灯片(360度全景图片)
Jul 28 Javascript
JS创建对象几种不同方法详解
Mar 01 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
node.js入门学习之url模块
Feb 25 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
Dec 29 Javascript
Vue render函数实战之实现tabs选项卡组件
Apr 22 Javascript
vue实现select下拉显示隐藏功能
Sep 30 Javascript
简单了解vue中的v-if和v-show的区别
Oct 08 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与Java进行通信的实现方法
2013/10/21 PHP
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
js数组的操作指南
2014/12/28 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
vue组件实例解析
2017/01/10 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
使用requests库制作Python爬虫
2018/03/25 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
《故都的秋》教学反思
2014/04/15 职场文书
法定代表人证明书
2014/11/28 职场文书