咋说了,可能跟 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. Oracle计划新的移动OpenJDK项目
  2. 浅析x86架构中cache的组织结构
  3. ETCD实现技术总结
  4. Yam旗下Degenerative Finance已上线uSTONKS和uGAS奖励计划
  5. zabbix分布式监控环境搭建
  6. Freeswitch 录制视频并播放
  7. 相亲交友小程序,案例:情深深之恋
  8. 阿里巴巴Java开发手册(2018-2021泰山版整理)
  9. 【安全资讯】安卓设备容易受到僵尸网络的DDoS攻击
  10. 用VC6.0实现上位机串口通信
  11. embedding lookup函数
  12. MATLAB的.fig文件打不开——有效解决
  13. 基于LSTM的诗词生成
  14. 码云提交不显示贡献度问题
  15. 【人工智能】AI竞赛,到底有什么价值?
  16. 【重磅综述】记忆系统:神经科学的启示「AI核心算法」
  17. 超低延时的H5直播,电子游戏互动控制直播,桌面远程控制直播方案
  18. maven 多模块项目,打包其中一个项目,Could not find artifact org.javaboy:commons:pom:1.0-SNAPSHOT
  19. CCSv5.3的安装
  20. 老闪创业那些事儿(外传)——教人与用人的撕裂

热门文章

  1. css 实现上升的气球效果
  2. 16G内存的iPhone手机能扩容?是真的 暴力拆机失质保! 值得吗?
  3. ubuntu 系统字体全部口口口口口口口口口口口口的解决办法
  4. 【Stable Diffusion】ControlNet基本教程(三)
  5. C#工作总结(四):循环引用的思考
  6. 西安考研计算机分低的学校,西安计算机考研学校排名(读研究生毕业能干嘛)
  7. 凸优化笔记4(两阶段法)
  8. 49. 字母异位词分组【中等】
  9. 全球及中国分散式风电项目开发建设及十四五战略布局分析2021-2027年
  10. MacOS和Windows下打开大的TXT文件的软件推荐