React 学习(二) ---- props验证与默认属性
在上一节中, 我们提到了props, 组件之间数据的传递使用props. 我们调用组件时可以设置props, 组件内部通过props获取. 为了props 使用更加友好, React 提供了简单的验证机制,就是我们可以标注我们的组件内部想要使用什么样的数据, 如果使用组件时传递过来的数据不符合要求, React就会抛出warnig, 有利于我们排错。
看一下我们的content 组件, 它内部用到了四个属性, name, item, num, bool, 并且类型也不一致. 我们肯定希望传递过来参数和组件内的要求是一一对应的,从而避免组件报错。这时我们可以在组件内作出一定的要求, 就是写一些验证条件. React的验证也很简单,给组件提供一个propTypes属性,它是一个对象,键就是组件内的属性,值就是验证条件。对于Content 组件来说,name 是一个字符串,item 是一个数据,num 是一个数字,bool是一个布尔值,所以我们就可以这样写
Content.propTypes = {
item: PropTypes.array,
name: PropTypes.string,
bool: PropTypes.bool,
num: PropTypes.number
}
这时用到了PropTypes库,array, string, bool, number 就是PropTypes 库提供的简单验证条件,只要我们写上number, React 就会帮我们验证它是不是number. 我们用script 引入PropTypes 库
<script src="https://unpkg.com/prop-types@15.6/prop-types.js"></script>
有时有些属性非常重要,我们要求必传,这时要提供一个isRequired进行表示,比如item属性是必传的
Content.propTypes = {
item: PropTypes.array.isRequired,
name: PropTypes.string,
bool: PropTypes.bool,
num: PropTypes.number
}
如果简单的验证不能满足我们的要求时,React 也提供了自定义验证。自定义验证,它是一个函数,有两个参数,props, 和propName, 它返回null 或 Erorr, 如果
通过验证,则返回null ,如果验证失败, 则返回一个错误。 props 和propName, 是React 自动注入的,我们不用管。我们对name提供一个自定义验证。
Content.propTypes = {
item: PropTypes.array.isRequired,
bool: PropTypes.bool,
num: PropTypes.number,
name: (props, propName) => { // 自定义验证
console.log(props, propName);
if (typeof props[propName] !== 'string') {
return new Error('必须传递一个字符串');
} else if (props[propName].length >= 5) {
return new Error('字符串长度必须小于5')
} else {
return null;
}
}
}
我打印了一下两个参数props 和propName, 可以看到props 就是我们整个组件接受到的所有属性,propName 就是当前验证的属性name. 这里的验证规则就是字符串小于5.
除了props验证之外,React 还提供了默认属性defaultProps, 给我们组件内部的属性提供默认值。它的语法与验证一样,也是一个对象,不过它的值是默认值,而不验证规则。
Content.defaultProps = {
name: 'sam'
}
以上props验证和defaulProps 语法,对类式组件和函数式组件都适用。对于函数式组件来说,defaultProps 还有一种更简单的方式,用ES6 的解构赋值。
const Content = ({item=[], name='', bool=false, num = 0}) => {
return
(<section>
<ul>
{
this.props.item.map((item, index) =>
<li key={index}>{item}</li>
)
}
</ul>
<p>name 的值是{this.props.name},类型是 {typeof this.props.name}</p>
<p>bool 的值是{this.props.bool},类型是 {typeof this.props.bool}</p>
<p>num 的值是{this.props.num},类型是 {typeof this.props.num}</p>
</section>
)
}
React 学习(二) ---- props验证与默认属性的更多相关文章
- 【React系列】Props 验证
Props 验证使用 propTypes,它可以保证我们的应用组件被正确使用,React.PropTypes 提供很多验证器 (validator) 来验证传入数据是否有效.当向 props 传入无效 ...
- react学习二 生命周期
转自:https://www.cnblogs.com/gdsblog/p/7348375.html react 中compent getDefaultProps object getDefaultPr ...
- react学习之props
中秋过后刚好结束在上一家公司的工作,明天开始要正式的找工作了,最近也投了几家公司收到几分面试邀请.在面试的过程中几个面试官聊到了react(当然也有聊了vue,angular).感觉不懂react都不 ...
- react学习(二)之通信篇
react性能提升原理:虚拟DOM react把真是的DOM tree,转化成virtual DOM,每次数据更新后,重新计算virtual DOM并与上一次的作对比,然后对发生改变的部分进行批量更新 ...
- React 学习二 组件
React的一个最大的特点就是组件化的开发模式.今天就来试一下: <!DOCTYPE html> <html> <head> <meta charset=&q ...
- nginx学习(二):nginx显示默认首页解析过程
本篇文章分析下nginx 显示默认首页的过程 如下图所示 查看config文件: # 如果忘记nginx 安装目录.使用下面命令查看 [root@XXX]# whereis nginx nginx: ...
- 【react学习二】create-react-app 接入antd 并按需加载组件
1.安装 cnpm i babel-plugin-import --save-dev 2.使用 在根目录下的package.json下的bable中添加相应代码 "babel": ...
- Linux day01(一) 创建Linux虚拟机,设置虚拟机默认属性,虚拟机和Xhell建立连接
一:创建Linux虚拟机步骤: 1. 二:设置虚拟机默认属性 三:虚拟机和Xhell建立连接
- React Native组件、生命周期及属性传值props详解
创建组件的三种方式 第一种:通过ES6的方式创建 /** * 方式一 :ES6 */ export default class HelloComponent extends Component { r ...
随机推荐
- Android 读取后台数据并显示。模拟小区车辆管理系统
帮别人做的演示系统,只具有基本的增删查改功能. 核心是android端和后台通过http传输数据 后台是asp.net,数据库是ms sql 2008 android端 private void ge ...
- 蓝牙Legacy Pairing流程概述
Legacy pairing 从名字上看可以知道它是老式设备采用的配对方法. 配对的最终目的是为了生成key,key可以给链路加密,保证双方设备通信的安全性.那配对流程的讲述其实就是key的生成过程. ...
- 微信小程序项目实战 - 菜谱大全
1. 项目简介 最近研究小程序云开发,上线了一个有关菜品查询的小程序.包括搜索.分享转发.收藏.查看历史记录等功能.菜谱 API 来自聚合数据.云开发为开发者提供完整的云端支持,弱化后端和运维概念,无 ...
- Java获取Window和Linux系统的项目ClassPath路径
不啰嗦,直接复制工具类 /** * 在windows和linux系统下均可正常使用 * Create by yster@foxmail.com 2018/6/6/006 14:51 */ public ...
- HashMap是如何工作的
目录 1 HashMap在JAVA中的怎么工作的? 2 什么是哈希? 3 HashMap 中的 Node 类 4 键值对在 HashMap 中是如何存储的 5 哈希碰撞及其处理 6 HashMap 的 ...
- Linux 的系统目录介绍
/bin 二进制可执行命令 /dev 设备特殊文件/etc 系统管理和配置文件/etc/rc.d 启动的配置文件和脚本/home 用户主目录的基点,比如用户user的主目录就是/home/user,可 ...
- Java 自动装箱与拆箱(Autoboxing and unboxing)
什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象实例的时候,我们会这样: Class a = ...
- HDU - 1166 - 敌兵布阵 线段树的单点修改,区间求和
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...
- 软件扒网站? 爬虫? F12查看源码? 查看网页源代码?浏览器sources? 区别和联系!
1.软件扒网站: 利用各类扒站网站,如仿站小工具8.0,可以按照规则将网站的未经浏览器简析的前端代码扒下来,并整理成css,js,html等文件夹,很方便.(当然看不到ajax等相关代码) 备注:如果 ...
- python知识点及面试面试大集合
题目来源:武sir--一个很有意思的人,点击这儿跳转 一.基础篇 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解 ...