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 相关文章推荐
使用Java实现简单的server/client回显功能的方法介绍
May 03 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
Jul 17 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
Dec 03 Javascript
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
jQuery插件Validation快速完成表单验证的方式
Jul 28 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
Sep 02 Javascript
原生js实现旋转木马轮播图效果
Feb 27 Javascript
详解vue.js的devtools安装
May 26 Javascript
jquery.validate表单验证插件使用详解
Jun 21 jQuery
浅谈webpack 自动刷新与解析
Apr 09 Javascript
微信小程序画布圆形进度条显示效果
Nov 17 Javascript
jquery图片预览插件实现方法详解
Jul 18 jQuery
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 Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
8个必备的PHP功能开发
2015/10/02 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
python的help函数如何使用
2020/06/11 Python
python+requests接口自动化框架的实现
2020/08/31 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
阿波罗盒子:Apollo Box
2017/08/14 全球购物
汉森批发:Hansen Wholesale
2018/05/24 全球购物
家长给老师的道歉信
2014/01/13 职场文书
药学职务聘任书
2014/03/29 职场文书
妇联主席先进事迹
2014/05/18 职场文书
公司文体活动总结
2015/05/07 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
采购部年度工作总结
2015/08/13 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android