react 之 prop-types

原文地址

在开发过程当中,经常会用到Prop的type校验,但是React.PropTypes和React.createClass这两个功能在React 15.5之后版本被废弃了,所以从15.5版本开始,须要引入prop-types包来使用props校验。

使用步骤

  1. 安装prop-types第三方包

    yarn add prop-types  //yarn
    npm install prop-types  //npm
    
  2. 导入

    import PropTypes from 'prop-types' //ES6语法
    
  3. 使用

    组件.propTypes = {propName: PropTypes.约束
    }
    //例
    App.propTypes = {colors: PropTypes.array
    }
    
  4. 常见的约束规则

    1. 常用类型

        PropTypes.array //数组PropTypes.bool  //布尔PropTypes.func  //函数PropTypes.object  //对象PropTypes.number  //数值PropTypes.string  //字符串PropTypes.symbol  //SymbolPropTypes.element  //React元素
      
    2. 必填项:isRequired—在类型后面添加

      App.propTypes = {colors: PropTypes.array.isRequired
      }
      //限制colors为数组类型,且必需
      
    3. 仅限制必要:any.isRequired

      App.propTypes = {colors: PropTypes.any.isRequired
      }
      //限制colors类型随意,但必需
      
    4. 多可选类型:oneOfType([])

      App.propTypes = {colors: PropTypes.oneOfType([PropType.string,PropType.number])
      }
      //该方法接受一个数组参数,数组内容为允许通过的类型
      
    5. 多可选值:oneOf([])

      App.propTypes = {colors: PropTypes.oneOf(['red', 'blue'])
      }
      //colors的值只能从red和blue中选择一个
      
    6. 特定的结构对象:shape({})

      App.propTypes = {people: PropTypes.shape({name: PropTypes.string.isRequired,id: PropTypes.number.isRequired})
      }
      //例如:people = {name: 'zhangsan', id: 123} 满足校验
      

    小例

    //Home.jsx
    import React from "react";
    import PropTypes from 'prop-types';function Home(props) {return (<div><span>{props.value}</span><button onClick={props.increaseValue}>+</button></div>)
    }Home.propTypes = {value: PropTypes.number.isRequired,increaseValue: PropTypes.func.isRequired
    }export default Home
    
    //App.jsx
    import React from "react";
    import Home from "./Component/Home";function App() {return (<div className="App"><Home value={0} increaseValue={()=>{}}/></div>);
    }export default App;

    ps:

    1. ​ 一旦设置props校验,就必须按照规定,那怕如上例所写传入一个函数的壳子。

    2. Home.propTypes = {//这里是propTypes, 首字母p不能大写,否则会出现如下错误。value: PropTypes.number.isRequired,increaseValue: PropTypes.func.isRequired
      }
      
      Failed to compile.src\Component\Home\index.jsxLine 12:6:  Typo in static class property declaration  react/no-typosSearch for the keywords to learn more about each error.

    :本博客仅供个人学习,如有错误、侵权敬请指出。

react 之 prop-types相关推荐

  1. vue使用slot分发内容与react使用prop分发内容

    vue 将 <slot> 元素作为承载分发内容的出口 // layout.vue <div class="container"><main>&l ...

  2. 如何使用Webpack 4简化React.js开发过程

    by Margarita Obraztsova 玛格丽塔(Margarita Obraztsova) 如何使用Webpack 4简化React.js开发过程 (How to streamline yo ...

  3. 我如何使用React和Typescript在freeCodeCamp中构建天气应用

    by Kelvin Mai 通过凯文麦 我如何使用React和Typescript在freeCodeCamp中构建天气应用 (How I built the weather app in freeCo ...

  4. 把这304道React的面试题刷完,前端面试没有在怕的!

    Core React 什么是 React? React 是一个开源前端 JavaScript 库,用于构建用户界面,尤其是单页应用程序.它用于处理网页和移动应用程序的视图层.React 是由 Face ...

  5. React 面试题 回答

    原文https://github.com/semlinker/reactjs-interview-questions 本项目的面试题来源于 sudheerj/reactjs-interview-que ...

  6. react 与 Vue的一些比较

    原文地址 组件开发 特性对比 众所周知,Vue和React都有那么一个特性,那就是可以让我们进行组件化开发,这样可以让代码得到更好的重用以及解耦,在架构定位中这个应该叫纵向分层吧.但是,两个框架开发组 ...

  7. 撰写本文的所有基本React.js概念

    Update: This article is now part of my book "React.js Beyond The Basics". 更新:本文现在是我的书<超 ...

  8. 一文详解 React 组件类型

    本文的目标是让开发者清晰地了解 React 组件类型,哪些在现代 React 应用中依然在使用,以及为何一些类型现在不再使用了. 作者 | Robin Wieruch 译者 | 弯月 责编 | 屠敏 ...

  9. React 生命周期

    生命周期方法 组件的生命周期分成三个状态: Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmounting:已移出真实 DOM React 为每个状态都提供了两种处理函数 ...

  10. React-从0到1搭建一个React项目(一)

    文章目录 架构介绍 第三方组件库 项目准备 环境准备 使用create-react-app初始化项目 创建项目目录结构 安装第三方库 利用工作之余的时间学习了react,今年一回来,部门要在公众号上面 ...

最新文章

  1. Arduino可穿戴教程认识ArduinoIDE
  2. csp2020 j2民间数据下载_华为麒麟 990 5G 下载速率领先
  3. CSS过渡属性transitions详细解读——Web前端系列学习笔记
  4. Failed to install Tomcat7 service 解决
  5. 随机生成元素升序向量_实验二MATLAB运算基础 -
  6. 一:MyBatis知识整理(1)
  7. 阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
  8. 职称计算机和英语有效性,2015职称计算机考试突破小诀窍
  9. 【Linux】解决shell脚本中syntax error:unexpected end of file问题
  10. qqpcmgr_docpro 这个隐藏文件无法删除的问题解决方法
  11. mybatis中的when,then,end的用法
  12. arm mali 天梯图_手机CPU天梯图2018年12月最新版 秒懂十二月手机处理器排名
  13. windows命令行下schtasks创建定期任务
  14. 同为120Hz LTPO屏,OPPO Find X3高性价比更吸睛
  15. 面部识别预处理全家桶:mtcnn人脸捕捉、人脸点对齐、仿射运算
  16. [Reproduced works]MongoDB Unauthorized Access Vulnerability
  17. java获取图片像素点的rgb值_java获取图片每个像素点的RGB
  18. ios系统苹果手机进行电脑微信双开方法详细教程
  19. DJ logo图片 DJ logo设计
  20. pandas 读表格_手把手教你数据分析(1)--Pandas读取Excel信息

热门文章

  1. 达梦数据库逻辑备份(dexp/dimp)
  2. 【python进阶】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
  3. 我发现不少培训班的就业辅导老师,简直是面试官的卧底——再论培训班学员的就业方式(java方向)
  4. 前端 报培训班还是自学
  5. 系统辨识(六):最小二乘法的修正算法
  6. 计算机自定义桌面,如何自定义电脑桌面的图标显示
  7. python 之hellow
  8. 从off-heap到Azul's Zing(JVM)
  9. 机器阅读理解论文必读论文(二): Teaching Machines to Read and Comprehend
  10. Blockchains Distributed L week3 爱宝授课记录(1)