使用PropTypes进行类型检测

随着你的应用的变得越来越大,你可以通过typechecking来找到更多的bug。 对于某些应用,您可以使用JavaScript扩展(如FlowTypeScript)对整个应用程序进行类型检查。

即使你不使用这些,React也有一些内置的typechecking能力。 要在组件的props上运行typechecking,可以分配特殊的propTypes属性:

class Greeting extends React.Component {render() {return (<h1>Hello {this.props.name}</h1>)};
}
Greeting.propTypes = {name: React.PropTypes.string.isRequired
};

React.PropTypes返回的是一系列验证函数,用于确保接收的数据类似是否是有效的。 
在这个例子中,我们使用React.PropTypes.string.isRequire检测name是否为字符串,并且是必填的。 
当为prop提供无效值时,JavaScript控制台中将显示警告。 出于性能原因,仅在开发模式下检查propTypes

React.PropTypes

下面是一个示例,其中提供了不同的验证函数:

MyComponent.propTypes = {// 你可以定义一个js原始类型的prop,默认请情况下,这是都是可选的optionalArray: React.PropTypes.array,optionalBool: React.PropTypes.bool,optionalFunc: React.PropTypes.func,optionalNumber: React.PropTypes.number,optionalObject: React.PropTypes.object,optionalString: React.PropTypes.string,optionalSymbol: React.PropTypes.symbol,// 任何可以渲染的东西:数字,字符串,元素或数组(或片段)。optionalNode: React.PropTypes.node,// React元素optionalElement: React.PropTypes.element,// 你也可以声明prop是某个类的实例。 内部使用的是JS的instanceof运算符。optionalMessage: React.PropTypes.instanceOf(Message),// 你可以通过将它作为枚举来确保你的prop被限制到特定的值。optionalEnum: React.PropTypes.oneOf(['News', 'Photos']),// 可以是许多类型之一的对象optionalUnion: React.PropTypes.oneOfType([React.PropTypes.string,React.PropTypes.number,React.PropTypes.instanceOf(Message)]),// 某种类型的数组optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),// 具有某种类型的属性值的对象optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),// 采取特定样式的对象optionalObjectWithShape: React.PropTypes.shape({color: React.PropTypes.string,fontSize: React.PropTypes.number}),// 你可以用`isRequired`来连接到上面的任何一个类型,以确保如果没有提供props的话会显示一个警告。requiredFunc: React.PropTypes.func.isRequired,// 任何数据类型requiredAny: React.PropTypes.any.isRequired,// 您还可以指定自定义类型检查器。 如果检查失败,它应该返回一个Error对象。 不要`console.warn`或throw,因为这不会在`oneOfType`内工作。customProp: function(props, propName, componentName) {if (!/matchme/.test(props[propName])) {return new Error('Invalid prop `' + propName + '` supplied to' +' `' + componentName + '`. Validation failed.');}},// 您还可以为`arrayOf`和`objectOf`提供自定义类型检查器。 如果检查失败,它应该返回一个Error对象。 // 检查器将为数组或对象中的每个键调用验证函数。 // 检查器有两个参数,第一个参数是数组或对象本身,第二个是当前项的键。customArrayProp: React.PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) {if (!/matchme/.test(propValue[key])) {return new Error('Invalid prop `' + propFullName + '` supplied to' +' `' + componentName + '`. Validation failed.');}})
};

要求只能是单个子元素

使用React.PropTypes.element,您可以指定只有一个子元素可以作为内容传递的组件。

class MyComponent extends React.Component {render() {// 只能包含一个子元素,否则会给出警告const children = this.props.children;return (<div>{children}</div>);}
}MyComponent.propTypes = {children: React.PropTypes.element.isRequired
}

设置Prop默认值

您可以通过使用defaultProps属性来定义props的默认值:

class Greeting extends React.Component {render() {return <h1>hello {this.props.name}</h1>;};
}// 如果name没有传值,则会将name设置为默认的zhangyatao
Greeting.defaultProps = {name: 'zhangyatao'
}// 会渲染处<h1>hi zhangyatao</h1>
ReactDOM.render(<Greeting />,document.getElementById('root')
)

如果父组件没有设置并传入namedefaultProps将确保this.props.name将有一个默认值。 propTypes类型检查发生在defaultProps解析之后,因此类型检查也将应用于defaultProps

使用=React.PropTypes进行类型检测相关推荐

  1. react prop-types的使用讲解

    1.引言--JavaScript就是一个熊孩子 1.1对于JSer们来说,JS是自由的,但同时又有许多让人烦恼的地方.javascript 很多时候就是这么一个熊孩子,他很多时候并不会像Ç和java的 ...

  2. react 中的propTypes类型检测

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

  3. 浅谈React的类型检测——PropTypes

    随着应用的日益变大,保证组件的正确使用显得日益重要,为此引入React.propTypes:React.PropTypes 提供很多验证器来验证传入数据的有效性,当向props传入无效数据时,Java ...

  4. propTypes 类型检测

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

  5. react 使用 PropTypes 进行类型检查

    目录 前言 一.安装 prop-types 插件 二.PropTypes 的规则 1.PropTypes 的一系列验证 (1).检测 JS 原生类型 (2).检测任何元素 (3).检测 react 元 ...

  6. [react] 在React中我们怎么做静态类型检测?都有哪些方法可以做到?

    [react] 在React中我们怎么做静态类型检测?都有哪些方法可以做到? flow 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣 ...

  7. React文档(十五)使用propTypes进行类型检查

    注意: React.PropTypes 自 React v15.5 起已弃用.请使用 prop-types 库代替. 随着你的应用的开发,你会使用类型检查的方法来捕获很多bug.对于一些应用,你可以使 ...

  8. 2 Reactjs 使用 PropTypes 进行类型检查

    要在组件中进行类型检测,你可以使用 propTypes 属性. 使用示例: import PropTypes from 'prop-types';class Greeting extends Reac ...

  9. [OHIF-Viewers]医疗数字阅片-医学影像-使用 PropTypes 进行类型检查

    [OHIF-Viewers]医疗数字阅片-医学影像-使用 PropTypes 进行类型检查 注意: 自 React v15.5 起,React.PropTypes 已移入另一个包中.请使用 prop- ...

最新文章

  1. 青龙羊毛——更新日志(2022-04-07更新)
  2. android从放弃到精通 第八天 freedom
  3. 在阿里,我们这样帮助用户实现业务云原生化迁云
  4. 能够快速赚到钱的,一般就三类人
  5. nodepad++通过正则表达式,删除带有特殊字符的某一行
  6. 【转载】Chrome 0day漏洞:不要用Chrome查看pdf文件
  7. 那些年-SAP固定资产导入AS91 OASV
  8. C++使用ODBC连接数据库遇到的问题
  9. jsp基础教程清华版源代码
  10. cbrt c语音,多态性(C语言)
  11. Java开发内存16g够用不_讨论!现在的你是否还能用16G手机,内存还够不够用?...
  12. 如何在虚拟一个USB设备
  13. 模拟IC设计——反相器
  14. 哈佛大学教授:Web3如何重构被巨头破坏公平性的互联网
  15. 行测做的慢,如何提升做题速度?怎么提升正确率?
  16. C++ 多线程——pthread_cancel 取消线程的疑惑
  17. Windows远程桌面服务漏洞(CVE-2019-0708)复现测试
  18. 数据结构顺序表中Sqlist *L,L,Sqlist *L
  19. web前端开发h5,2021中高级前端面试题合集
  20. 软路由初步尝试-U盘运行LEDE

热门文章

  1. uni-app条件编译 解决各端差异
  2. 笔记本怎样运行android程序,PC手机二合一 在笔记本上如何运行安卓程序
  3. springboot连接redis集群
  4. Tineye (介绍)
  5. 推荐大家研究一个网站tineye.com
  6. The web application [] appears to have started a thread named [Thread-
  7. linux wstring乱码,对C++中ANSI,GBK,utf8,wstring,string,unicode的一些重要踩坑总结
  8. CRM,下一程在哪?
  9. AD域无法删除组织单位
  10. Python技术栈学习路线