每个组件都有自己的props参数,这参数是从父组件接收的一些属性,那么如何对参数的类型作校验。如何定义参数的默认值。这里涉及到两个基础的概念,叫做proptypes 和 defaultprops。子组件要接收的类型是固定,父组件不能乱传。比如显示的是个字符串,父组件就不能传个函数过来,不然代码是有问题的。这是时候就要使用proptyps进行一个强校验。
使用proptypes,第一步就要引用proptypes。
import Proptyps from 'prop-types';
TodoItem.propTypes = {
  content: Proptyps.string,
  handleItemDelete: Proptyps.func,
  index: Proptyps.number
}
一般开发的时候都建议把Proptyps写上去,这样传值不对的时候,就会有一个明显的警告。
如果在子组件写一个父组件传值中没有的参数,代码没有任何的错误,只不过参数没有接收,不会显示而已,这个时候对于没有传递的参数,是不会去做校验,如果这个参数是必须要的,可以强制去做校验,例如
import Proptyps from 'prop-types';
TodoItem.propTypes = {
  test: Proptyps.string.isRequired
}
isRequired表示父组件必须要向子组件传递,不传递,会报警告。
有的时候子组件要求父组件必须要传这个test,但有时候父组件实在没办法传这个test.那么可以给test定义一个默认值。
import Proptyps from 'prop-types';
TodoItem.propTypes = {
  test: Proptyps.string.isRequired
}
TodoItem.defaultProps = {
  test: 'hello world'
}
这样就要求父组件必须传,不传就显示默认值。
假设现在我有个这样的需求,这个参数不仅可以是string类型,还可以是number类型。
import Proptyps from 'prop-types';
TodoItem.propTypes = {
  content: Proptyps.oneOfType([Proptyps.string, Proptyps.number])
}

下面这个arrayOf表示content是个数组,数组里面的内容可以是string,也可以是number

import Proptyps from 'prop-types';
TodoItem.propTypes = {
  content: Proptyps.arrayOf(Proptyps.string, Proptyps.number)
}

react中PropTypes与DefaultProps的应用的更多相关文章

  1. react中prop-types的使用

    什么是prop-types?prop代表父组件传递过来的值,types代表类型.简单来说就是用来校验父组件传递过来值的类型 import PropTypes from 'prop-types'; To ...

  2. React中静态类型校验 - PropTypes

    1.基本说明PropTypes定义为组件类自身的属性,用以定义prop的类型.在开发模式下,当提供一个不合法的值作为prop时,控制台会出现警告: 在产品模式下,为了性能考虑应忽略propTypes ...

  3. React中使用 PropTypes 进行类型检查

    官方文档学习链接:https://zh-hans.reactjs.org/docs/typechecking-with-proptypes.html import React, { Component ...

  4. react PropTypes 与 DefaultProps

    PropTypes 与 DefaultProps import React ,{ Component } from 'react'; import PropTypes from 'prop-types ...

  5. React中props

    今天让我们开启新的篇章好吧,来搞一搞React,以下所有操作都是我个人的一些理解,如果有错吴还请指出,想要看更全的可以去React官网可能一下子好吧 昨天按摩没到位,导致今天身体不太行,撸码千万别苦了 ...

  6. React中的三大属性

    一.前言: 属性1:state 属性2:props 属性3:ref 与事件处理 二.主要内容: 属性1:state 1,认识: 1) state 是组件对象中最重要的属性,值是一个对象(可以包含多个数 ...

  7. React中state和props分别是什么?

    整理一下React中关于state和props的知识点. 在任何应用中,数据都是必不可少的.我们需要直接的改变页面上一块的区域来使得视图的刷新,或者间接地改变其他地方的数据.React的数据是自顶向下 ...

  8. [ES6]react中使用es6语法

    前言 不论是React还是React-native,facebook官方都推荐使用ES6的语法,没在项目中使用过的话,突然转换过来会遇到一些问题,如果还没有时间系统的学习下ES6那么注意一些常见的写法 ...

  9. react中使用截图组件Cropper组件

    --最近项目用react,学习react并使用cropper组件裁剪图片. (这里开发组件不够统一有用tsx(TypeScript + xml/html)写的组件,有用jsx(javascript+x ...

随机推荐

  1. 安装并配置hive

    教程:http://www.bubuko.com/infodetail-2523113.html 安装好mysql,然后进入mysql: 创建hive用户: 给hive用户赋权: 创建hive数据库, ...

  2. python发送信息到邮箱

    import smtplib from email.mime.text import MIMEText 设置服务器所需信息 163邮箱服务器地址 mail_host = 'smtp.163.com' ...

  3. oracle 基础知识(十四)----索引扫描

    (1)索引唯一扫描(index unique scan) 通过唯一索引查找一个数值经常返回单个ROWID.如果该唯一索引有多个列组成(即组合索引),则至少要有组合索引的引导列参与到该查询中,如创建一个 ...

  4. 在CentOS 7上搭建私有Docker仓库

    Hub IP:10.0.2.6 操作系统:CentOS 7 64位 Docker版本:1.12.5Client IP:10.0.2.4 操作系统:CentOS 7 64位 Docker版本:1.12. ...

  5. webservice 注解介绍

    JAX-WS 注释 “基于 XML 的 Web Service 的 Java API”(JAX-WS)通过使用注释来指定与 Web Service 实现相关联的元数据以及简化 Web Service ...

  6. 0.数据结构(python语言) 基本概念 算法的代价及度量!!!

    先看思维导图: *思维导图有点简陋,本着循循渐进的思想,这小节的知识大多只做了解即可. *重点在于算法的代价及度量!!!查找资料务必弄清楚. 零.四个基本概念 问题:一个具体的需求 问题实例:针对问题 ...

  7. elasticSearch2.4与grafana,stagemonitor集成做监控需要执行的mapping

    PUT /_template/stagemonitor-metrics-{ "template": "stagemonitor-metrics-*", &quo ...

  8. 使用SeaJS实现模块化JavaScript开发【转】

    前言 SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.与jQuery等JavaScript框架不同,SeaJS不会扩展封 ...

  9. springboot和mybatis集成,自动生成model、mapper,增加mybatis分页功能

    整体思路和http://www.cnblogs.com/mahuan2/p/5859921.html相同. 主要讲maven的pom.xml和一些配置变化,详细说明. 软件简介 Spring是一个流行 ...

  10. C#自定义控件 在 Toolbox显示不了的问题

    1) Close your solution2) Tools->Options->"Windows Form Designer" - find AutoToolboxP ...