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 ...
随机推荐
- Eclipse 设置保存代码时自动格式化
在码代码或者优化的时候,经常需要使用到ctrl+shift+F来格式化代码,但其实ecilpse已经自带自动格式化功能了,只是没有默认开启. 正确的打开方式:windows-->Preferen ...
- Gradle构建工具从入门到精通(IDEA)
1.Gradle安装 官网下载压缩包,然后解压,配置本地环境变量.主要有下面两个: GRADLE_HOME 是解压后的目录, GRADLE_USER_HOME 的作用是让其他程序检测到本地.gradl ...
- Feign性能优化注意事项
一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 @FeignClient(name ...
- 深入浅出Tomcat/1- 来历和配置文件
背景 Tomcat是一个非常重要的Web Server,已经存在多年.尤其是最近几年,因为Spring MVC或是Spring Boot的盛行,Tomcat的地位越发重要,地位明显升级. 我相信很 ...
- 如何解决 Windows 实例出现身份验证错误及更正 CredSSP
阿里云上的ESC赠送1核2G服务器,安装windows server 2016 Datacenter 3389远程登录时提示错误信息,参考阿里文档:https://help.aliyun.com/kn ...
- H5 54-清空默认边距
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- DWZ富客户端框架(jQuery RIA framework)
该OA项目前端采用的是DWZ框架来进行实现的. 本来想写点总结的,但发现真没啥好写的.中文的文档,到时候用到直接看文档就好.
- Redis服务端的搭建(初级)
前方低能,仅适合入门级菜鸟阅读,大神大牛通通闪开! 前言:redis经常被用来做缓存(原因自行科普),基于学习的需要自己搭建了一个redis服务器,考虑到项目的分布式部署,所以前期开始的时候,redi ...
- net core 小坑杂记之配置文件读取(不定期更新)
其实很早就想写了,原想等积累差不多了再写的,但是发现遇到一个当时记下效果会比较好,所以就不定期更新这个系列了,后面获取会整个整理一下. 此篇记载net core入门时踩的一些坑,网上教程太少了,也不规 ...
- 学习 yii2.0——视图之间相互包含
布局 首先创建一个布局文件simple.php,路径是在views/layout/目录下. <p>this is header</p> <?= $content ?> ...