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+JSon 无刷新分页实现代码
Apr 01 Javascript
JS 实现列表与多选框选择附预览动画
Oct 29 Javascript
21个JavaScript事件(Events)属性汇总
Dec 02 Javascript
AngularJS轻松实现双击排序的功能
Aug 30 Javascript
jQuery中slidedown与slideup方法用法示例
Sep 16 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
Nov 01 Javascript
js封装tab标签页实例分享
Dec 19 Javascript
深入学习jQuery中的data()
Dec 22 Javascript
JS闭包与延迟求值用法示例
Dec 22 Javascript
详解vue-cli与webpack结合如何处理静态资源
Sep 19 Javascript
浅谈Vue 数据响应式原理
May 07 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
Nov 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
在Python中使用HTML模版的教程
2015/04/29 Python
Python BS4库的安装与使用详解
2018/08/08 Python
python打开使用的方法
2019/09/30 Python
Python request操作步骤及代码实例
2020/04/13 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
小学美术教学反思
2014/02/01 职场文书
市场营销方案范文
2014/03/11 职场文书
二年级评语大全
2014/04/23 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
水电站项目建议书
2014/05/12 职场文书
公司承诺书格式
2014/05/21 职场文书
党在我心中演讲稿
2014/09/02 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
早恋主题班会
2015/08/14 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
2016党校学习心得体会
2016/01/07 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js