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 相关文章推荐
In Javascript Class, how to call the prototype method.(three method)
Jan 09 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
Apr 06 Javascript
js调用activeX获取u盘序列号的代码
Nov 21 Javascript
JS中Iframe之间传值及子页面与父页面应用
Mar 11 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
Sep 06 Javascript
易操作的jQuery表单提示插件
Dec 01 Javascript
jQuery的框架介绍
May 11 Javascript
bootstrap多种样式进度条展示
Dec 20 Javascript
JavaScript轻松创建级联函数的方法示例
Feb 10 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
Feb 23 Javascript
Bootstrap导航中表单简单实现代码
Mar 06 Javascript
JS操作字符串转数字的常见方法示例
Oct 29 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
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
如何离线执行php任务
2017/02/21 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
python调用新浪微博API项目实践
2014/07/28 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
python设置环境变量的作用和实例
2019/07/09 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
python如何爬取网页中的文字
2020/07/28 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
python实现学生通讯录管理系统
2021/02/25 Python
感恩的演讲稿
2014/05/06 职场文书
红头文件任命书范本
2014/06/05 职场文书
环保标语大全
2014/06/12 职场文书
小学课外活动总结
2014/07/09 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书