前言

本系列是基于React Native版本号0.44.3写的。在我们之前的通过props实现组件间传值的时候,大家有没有发现在父组件传递值过去,在子控件获取props的时候没有提示,那么如何能实现让其有提示呢?这篇文章将带领大家去认识一下PropTypes这个玩意。

PropTypes

  • 问题: 在自定义组件的时候,通常需要暴露属性出去,并且设置属性类型,外界在使用自定义组件的属性的时候,需要有自动提示属性功能。

  • 解决: 使用PropTypes
  • PropTypes用处:

    • 可以实现类型检查,当传入错误的属性值,会报警告,但是不会报错
    • PropTypes定义属性,外界使用的时候会有提示
  • 注意点:

    • PropTypes必须要用static声明,否则无效果
    • PropTypes只能用于React框架的自定义组件,默认JS是没有的,因为它是React框架中的。
  • static:用来定义类方法或者类属性,定义类的方法和属性,生成的对象就自动有这样的属性了。

PropTypes的使用

  • PropTypes:属性检测,使用的时候需要先导入,在React框架中
  1. import React, { Component, PropTypes } from 'react';
  • 使用

在自定义组件添加如下代码:

  1. static propTypes = {
  2. name: PropTypes.string,
  3. age: PropTypes.number
  4. }
  • 效果:

属性类型

  1. // 数组类型
  2. PropTypes.array
  3. // 布尔类型
  4. PropTypes.bool
  5. // 函数类型
  6. PropTypes.func
  7. // 数值类型
  8. PropTypes.number
  9. // 对象类型
  10. PropTypes.object
  11. // 字符串类型
  12. PropTypes.string
  13. // 规定prop为必传字段
  14. PropTypes.(类型).isRequired
  15. // prop为任意类型
  16. PropTypes.any.isRequired

给自定义属性设置初始值

  • 如果想要给自定义属性添加默认初始值,需要使用defaultProps
  • 注意:也是需要用static修饰
  1. static defaultProps = {
  2. name: 'scottDefault',
  3. age: 12
  4. }

实战演练

  1. class ScottComponent extends Component {
  2. static propTypes = {
  3. name: PropTypes.string.isRequired,
  4. age: PropTypes.number
  5. }
  6. static defaultProps = {
  7. name: 'scottDefault',
  8. age: 12
  9. }
  10. render(){
  11. return (
  12. <View style={styles.scottStyle}>
  13. <Text>组件名字:{this.props.name}</Text>
  14. <Text>组件年龄:{this.props.age}</Text>
  15. </View>
  16. );
  17. }
  18. }
  19. // 主组件
  20. export default class RNDemoOne extends Component {
  21. render() {
  22. return (
  23. <View style={styles.container}>
  24. <ScottComponent/>
  25. </View>
  26. );
  27. }
  28. }
  29. const styles = StyleSheet.create({
  30. container: {
  31. flex: 1,
  32. },
  33. scottStyle: {
  34. flex: 1,
  35. backgroundColor: '#F5FCFF',
  36. justifyContent: 'center',
  37. alignItems: 'center',
  38. },
  39. });

致谢

如果发现有错误的地方,欢迎各位指出,谢谢!

React Native 系列(六)的更多相关文章

  1. React Native 系列(六) -- PropTypes

    前言 本系列是基于React Native版本号0.44.3写的.在我们之前的通过props实现组件间传值的时候,大家有没有发现在父组件传递值过去,在子控件获取props的时候没有提示,那么如何能实现 ...

  2. 【REACT NATIVE 系列教程之十二】REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信

    http://blog.csdn.net/xiaominghimi/article/details/51586492 一用到跨平台的引擎必然要有引擎与各平台原生进行交互通信的需要.那么Himi先讲解R ...

  3. React Native 系列(一) -- JS入门知识

    前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...

  4. React Native 系列(二) -- React入门知识

    前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...

  5. React Native 系列(四) -- 布局

    前言 本系列是基于React Native版本号0.44.3写的.RN支持CSS中的布局属性,因此可以使用CSS布局属性,这里就不详细地讲解了,这篇文章的重点主要是讲述一下RN中的Flex布局. CS ...

  6. React Native 系列(五) -- 组件间传值

    前言 本系列是基于React Native版本号0.44.3写的.任何一款 App 都有界面之间数据传递的这个步骤的,那么在RN中,组件间是怎么传值的呢?这篇文章将介绍到顺传.逆传已经通过通知传值. ...

  7. React Native 系列(七) -- ListView

    前言 本系列是基于React Native版本号0.44.3写的.几乎所有的App都使用了ListView这种组件,这篇文章将学习RN中ListView的平铺样式和分组样式. ListView平铺样式 ...

  8. React Native 系列(八) -- 导航

    前言 本系列是基于React Native版本号0.44.3写的.我们都知道,一个App不可能只有一个不变的界面,而是通过多个界面间的跳转来呈现不同的内容.那么这篇文章将介绍RN中的导航. 导航 什么 ...

  9. React Native 系列(九) -- Tab标签组件

    前言 本系列是基于React Native版本号0.44.3写的.很多的App都使用了Tab标签组件,例如QQ,微信等等,就是切换不同的选项,显示不同的内容.那么这篇文章将介绍RN中的Tab标签组件. ...

随机推荐

  1. python列表排序方法reverse、sort、sorted

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...

  2. Elasticsearch技术解析与实战(七)Elasticsearch批量操作

    批量查询 1.如果查询的document是不同index下的不同type种的话 GET /_mget { "docs" : [ { "_index" : &qu ...

  3. [linux]ubuntu在线安装mysql

    1. sudo apt-get install mysql-server   2. apt-get isntall mysql-client   3.  sudo apt-get install li ...

  4. bzoj 3123 可持久化线段树启发式合并

    首先没有连边的操作的时候,我们可以用可持久化线段树来维护这棵树的信息,建立权值可持久化线段树,那么每个点继承父节点的线段树,当询问为x,y的时候我们可以询问rot[x]+rot[y]-rot[lca( ...

  5. 【IDEA】与Eclipse "Link with Editor"等价功能设置

    Link With Editor是Eclipse内置功能中十分小巧,但却异常实用的一个功能.这个开关按钮 (Toggle Button) 出现在各式导航器视图 ( 例如 Resource Explor ...

  6. perl6 一个猜测密码的注入

    use HTTP::UserAgent; my $ua = HTTP::UserAgent.new; my $r = HTTP::Request.new; my $c = HTTP::Cookies. ...

  7. 31 - gogs安装-git基础

    目录 1 Gogs安装 2 Git介绍 3 使用Github仓库 3.1 Git配置 3.2 远程仓库 4 Git基本使用 4.1 创建版本库 4.2 查看工作区状态 4.3 查看修改内容 4.4 查 ...

  8. juery给所有ID属性相同的div绑定一个事件

    案例: <div id="div1">内容</div> <div id="div1">内容</div> < ...

  9. javadoc生成word接口文档

    1.下载DocFlex/Doclet 下载地址 http://www.filigris.com/downloads/ 2.ecplise->project->generate javado ...

  10. 苹果容器超出内容overflow滑动卡顿问题

    -webkit-overflow-scrolling:touch; 就这么一段代码,加载需要滚动的容器css样式中.因为苹果的硬件加速产生的后果....