每个组件都有自己的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. vue工程中使用iconfont在线CDN不生效的问题

    为什么在vue工程中引入iconfont有时候不生效呢? 请依次使用以下方法 1. 在index.html中引入在线资源 <!DOCTYPE html> <html lang=&qu ...

  2. pandas 多列排序

    import pandas as pd df = pd.DataFrame({'AAA' : [1,2,1,3], 'BBB' : [1,1,2,2], 'CCC' : [2,1,3,1]}) sou ...

  3. journalctl 中文手册

    版权声明 本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布. 无担保:本文译者不保证译文内容准确无误,亦不承担任何由于使用此文档所导致的损失. 自由使用:任何人都可以自 ...

  4. (转)linux命令详解之useradd命令使用方法

    linux命令详解之useradd命令使用方法 原文:http://blog.csdn.net/u011537073/article/details/51987121 Linux 系统是一个多用户多任 ...

  5. vim配置clojure开发环境备忘录

    1 需要使用的插件 vundle 使用教程 http://www.cnblogs.com/respawn/archive/2012/08/21/2649483.html vim-fireplace h ...

  6. c#字典排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. unity的技术博客

    技术博客 http://www.cnblogs.com/wangergo/

  8. pat04-树4. Root of AVL Tree (25)

    04-树4. Root of AVL Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue An A ...

  9. 深入理解JavaScript系列(15):函数(Functions)

    介绍 本章节我们要着重介绍的是一个非常常见的ECMAScript对象——函数(function),我们将详细讲解一下各种类型的函数是如何影响上下文的变量对象以及每个函数的作用域链都包含什么,以及回答诸 ...

  10. c# 远程连接共享文件

    c# 远程连接共享文件 /// <summary> /// 连接远程共享文件夹 /// </summary> /// <param name="path&quo ...