咋说了,可能跟 js本身弱类型语言有关吧, 当我们的react项目 越来越庞大而又复杂的时候, 特别是那种公共组件,如果不限制类型 可能会千奇百怪的往里面传入一些数据,

除非 你的文档中很详细描述每个 props 是什么类型的,或者你的项目使用 ts进行书写。

对于初学的react人员 比如博主这样的, 查看公共组件,或者使用公共组件, 应该特别是使用这块吧, 因为你要传给 组件一些props 值 然后就得看看一些类型的约束了,而不是由我们进行乱传。

这个 propTypes 还是需要我们简单了解了解呢, React 内置了一些类型检查的功能。要在组件的 props 上进行类型检查,你只需配置特定的 propTypes 属性:

需要做类型检测之前 需要我们安装一个 包 就是 prop-types
npm i prop-types --save
或者
yarn add prop-types --save

在react的老版本中是不需要安装 那个时候 react帮我们集成了 ,但后来就拆出来了,现在新版本的react都需要自己安装和使用了
假设我们不做限制的话

由父组件传来一个 name 和 age的值

function Demo(props) {return (<div>名字: { props.name } <br />年龄: { props.age }</div>)
}

我们在父组件中可以随意传递

<Demo name={"zhao"} age={"23"} />

就像上面的我们传递了 一个 age属性 但是穿的是 字符串类型的 23 这个显然是不严谨的
但是 程序却并没有给我 报错, 正常来说程序不报错 就是 很正常的吗? 好像确实如此 哈哈

接下来 我们引入 类型检测

import PropTypes from 'prop-types'
  1. 检测传值的类型
function Demo(props) {return (<div>名字: { props.name } <br />年龄: { props.age }</div>)
}Demo.propTypes = {name: PropTypes.string
}

然后就会发生程序会给我们报一个错误提示了

其实 意思也很简单 就是 age期望是一个 数值类型 你却给我传递了一个 字符类型 是不合法的
除了 这些 基础的字符和数字 类型检测 还有其他的一些

Demo.propTypes = {optionalArray: PropTypes.array,    // 检测数组optionalBool: PropTypes.bool,      // 检测布尔值optionalFunc: PropTypes.func,      // 检测函数optionalObject: PropTypes.object,  // 检测数值对象optionalSymbol: PropTypes.symbol,  // 检测是否是 symbol类型
}

但总归来说 上面的是 一些 相对来说比较简单的检测了,还有一些比较复杂的检测类型, 或者比较奇怪的类型检测

  1. 比如检测一个 React元素
Demo.propTypes = {element: PropTypes.element,
}
<Demo  element={<h2>hello world</h2>}/>
  1. 可枚举类型
    只能传递枚举的数据中 就像下面 只能传递 News 和 Photos 这两个中的一个
Demo.propTypes = {value: PropTypes.oneOf(['News', 'Photos']),
}
<Demo  value="News" />
  1. 指定数组中有哪些类型组成
Demo.propTypes = {array: PropTypes.arrayOf(PropTypes.number)  // 纯数字array: PropTypes.arrayOf(PropTypes.string)  // 纯字符
}
<Demo  array={[1, 2, 3]} />
<Demo  array={['1', '2', '3']} />
  1. 指定对象 属性中的类型
Demo.propTypes = {obj: PropTypes.shape({name: PropTypes.string,age: PropTypes.number})
}
<Demo  obj={{name: 'zhao', age: 1}} />
  1. 属性是 必传的
Demo.propTypes = {age: PropTypes.any.isRequired,  // 任意类型必传name: PropTypes.string.isRequired   // 是字符串类型 且必须传递
}
<Demo age={22} />   这个会报错的
<Demo age={22} name={"zhao"}/>  // 正确

注意 直接 写 PropTypes.isRequired 是 会出错了的

  1. 还有一个就是 默认值的 知识 当我们prop没有传递的时候 他可以使用默认值 就很好了
Demo.propTypes = {age: PropTypes.any.isRequired,name: PropTypes.any.isRequired
}
Demo.defaultProps = {    // 设置默认值name: 'zhao'
}
<Demo age={22} />

总结 其实 类型检测不止 上面的那些 ,而且现在的react可能老项目偏多点,
很多公共组件都是 用 class进行封装的 而我上面的使用 函数的组件进行例子讲解,
至于后续的想要深入了解 react类型检测 建议去官网 复查。但工作中常用的上面的应该是够了的, 加油

关注我 更新 前端知识 ====

react 中的propTypes类型检测相关推荐

  1. React中的propTypes

    在多人开发时,当被人使用自己定义的组件时,有可能出现类型传错的情况,而在自己的组件上加上prop-types,他可以对父组件传来的props进行检查,加入父组件中想传递的是字符串类型'3',而传递了一 ...

  2. propTypes 类型检测

    自 React v15.5 起,React.propTypes已移入另一个包中,需要引入prop-types库使用. 如果没有安装,请执行以下命令安装依赖: npm install prop-type ...

  3. 七十七、React中的propTypes,defaultProps和生命周期函数

    2020/11/19. 周四.今天又是奋斗的一天. @Author:Runsen React,相比于Vue,React更加灵活,但是对JavaScript基础的要求也更高一些.我继续学习React 文 ...

  4. react中的 PropTypes使用

    安装 npm i prop-types 类式组件 import {Component} from 'react' import PropTypes from "prop-types" ...

  5. react中prop-types的使用

    什么是prop-types?prop代表父组件传递过来的值,types代表类型.简单来说就是用来校验父组件传递过来值的类型 首先你需要通过在终端npm/yarn install/add prop-ty ...

  6. react中props详解

    1.props的基本使用 react组件之间的传值,是离不开props的 代码展示: export default class Parent extends Component {render() { ...

  7. 在Java中确定文件类型

    以编程方式确定文件的类型可能非常棘手,并且已经提出并实现了许多基于内容的文件标识方法. Java中有几种可用于检测文件类型的实现,其中大多数很大程度上或完全基于文件的扩展名. 这篇文章介绍了Java中 ...

  8. 我们应该如何优雅的处理 React 中受控与非受控

    受控 & 非受控 今天来和大家简单聊聊 React 中的受控和非受控的概念. 提到受控和非受控相信对于使用过 React 的朋友已经老生常谈了,在开始正题之前惯例先和大家聊一些关于受控 &am ...

  9. 使用=React.PropTypes进行类型检测

    使用PropTypes进行类型检测 随着你的应用的变得越来越大,你可以通过typechecking来找到更多的bug. 对于某些应用,您可以使用JavaScript扩展(如Flow或TypeScrip ...

最新文章

  1. 照葫芦画瓢-python editors(编辑器 IDE)
  2. c中gets函数使用可能导致缓冲区溢出
  3. eureka同步原理_eureka原理剖析
  4. 复现网状的记忆Transformer图像描述模型(失败)
  5. python数字识别关键技术_用Python从零开始设计数字图片识别神经网络--搭建基本架构...
  6. 定点乘法运算之原码一位乘法
  7. codeforces 463A Caisa and Sugar 解题报告
  8. PS颜色校正(Photoshop颜色显示偏色)
  9. SVN—创建分支、合并分支到主干
  10. 做微信小程序商城需要什么材料?
  11. 华为2019 秋招笔试题
  12. loj10099 点双连通分量
  13. echarts柱形图x轴y轴互换_echarts X Y轴互换后显示问题
  14. RabbitMQ, Kafka和Pulsar (一)
  15. 【诗词】八声甘州·摘青梅荐酒 (羡青山有思,白鹤忘机。)
  16. 短视频查重机制及去重方法
  17. linux指令grep语法,Linux grep 命令详解
  18. 安卓逆向工程之工具使用JADX,JEB,GDA的安装使用
  19. DM8168 - BT656格式视频采集
  20. 踩坑记录:管理实验室新购服务器

热门文章

  1. 假如吴签这些热搜明星是程序员。。。
  2. 美妆“数字员工”来了!丸美:每月节省30人日!提升员工幸福感,企业效益稳增
  3. 一篇文章带你了解TikTok直播
  4. 利用CSS选择器爬取豆瓣上的图书
  5. 互联网金融十大生意模式
  6. 《阴阳师》桃花妖在哪打
  7. ps如何填充自定义图案
  8. Ae 效果详解:发光
  9. 倩女幽魂服务器在维护中什么意思,倩女幽魂手游6月23日服务器在线维护公告
  10. QGIS基本功|4 图层进阶(一)创建和编辑图层