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 ...
随机推荐
- selenium:断言
在编写自动化测试脚本时,为了使“机器”去自动辨识test case的执行结果是True还是False,一般都需要在用例执行过程中获取一些信息,来判断用例的执行时成功还是失败. 判断成功失败与否,就涉及 ...
- Pyhton2.x 和Python3.x
一. 异常处理和pint区别 try: ...except Exception,e: # 2.x,3.x 需要把逗号(,)变为as. print e.message # 2.x,3.需要吧print内 ...
- 开发手记:JedisConnectionException: Could not get a resource from the pool
对于Redis,生产环境是集群模式,测试环境是单例模式,如果在生产环境中用单例模式会报错. 解决办法,通过云配置,将配置进行自动化配置. 另附一份Redis配置: #***************** ...
- 在Winform开发中使用FastReport创建报表
FastReport.Net是一款适用于Windows Forms, ASP.NET和MVC框架的功能齐全的报表分析解决方案.可用在Microsoft Visual Studio 2005到2015, ...
- Git超实用总结,再也不怕记忆力不好了
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯工蜂发表于云+社区专栏 Git 是什么? Git 是一个分布式的代码管理容器,本地和远端都保有一份相同的代码. Git 仓库主要是 ...
- 52ABP模板 ASP.Net Core 与 Angular的开源实例项目
阅读文本大概需要 5 分钟. 开始之前 自从上一篇文章".NET:持续进化的统一开发平台"发布后,已经有三个月的时间没有写过文章了. 这段时间,做了两场线下活动,一场在上海,一场在 ...
- ORM简介 单表添加修改删除表记录
---------------------------------------------------------------目标既定,在学习和实践过程中无论遇到什么困难.曲折都不灰心丧气,不轻易改变 ...
- Mysql:is not allowed to connect to this MySQL server
连接mysql的时候发生这个错误:ERROR 1130: Host '192.168.1.110' is not allowed to connect to this MySQL server 解决方 ...
- Win10系统如何安装Linux Mint
导读 随着windows10系统免费升级期限的靠近,越来越多朋友都将自己的电脑系统升级到了win10正式版.今天,小编就要在这里为大家分享Windows10系统安装Linux Mint的方法,希望能够 ...
- pip3 升级失败的解决方法!亲测有效
pip3 --default-timeout=10000 install -U pip 注意:由于防火长城的存在,会导致更新失败,如果你加上--default-timeout=10000 这个就ok ...