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 相关文章推荐
建议大家看下JavaScript重要知识更新
Jul 08 Javascript
javascript 仿QQ滑动菜单效果代码
Sep 03 Javascript
初窥JQuery-Jquery简介 入门了解篇
Nov 25 Javascript
js 立即调用的函数表达式如何写
Jan 12 Javascript
简单易用的倒计时js代码
Aug 04 Javascript
jQuery控制元素隐藏和显示
Mar 03 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 Javascript
React服务端渲染(总结)
Jul 01 Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
layui清空,重置表单数据的实例
Sep 12 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 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
使用Apache的rewrite技术
2006/06/22 PHP
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
Python文件操作基本流程代码实例
2017/12/11 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
市场拓展计划书
2014/05/03 职场文书
网络销售员岗位职责
2015/04/11 职场文书
地道战观后感
2015/06/04 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server