proptypes介绍
Posted ygunoil
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了proptypes介绍相关的知识,希望对你有一定的参考价值。
开始
prop-types的主要作用:对props中数据类型进行检测及限制
引用方法:import PropTypes from ‘prop-types‘
用法:
// 基本用法 用来检测数据类型 componentsName.PropTypes = { 参数变量: PropTypes.类型 } // 例子 myComponents.PropTypes = { name: Proptypes.string }
(官方文档原例)
- 指定基本数据类型
MyComponent.propTypes = { // 你可以将属性声明为以下 JS 原生类型 optionalArray: PropTypes.array, optionalBool: PropTypes.bool, optionalFunc: PropTypes.func, optionalNumber: PropTypes.number, optionalObject: PropTypes.object, optionalString: PropTypes.string, optionalSymbol: PropTypes.symbol, } 检
MyComponent.propTypes = { // 任何可被渲染的元素(包括数字、字符串、子元素或数组)。 optionalNode: PropTypes.node, }
- 检测是否是原型的实例
MyComponent.propTypes = {
optionalMessage: PropTypes.instanceOf(Message),
}
- 限制特定的内容——只能是news或者photos
MyComponent.propTypes = { // 你也可以限制你的属性值是某个特定值之一 optionalEnum: PropTypes.oneOf([‘News‘, ‘Photos‘]), }
- 在一定范围内的类型——可以是string,number,实例
MyComponent.propTypes = { // 限制它为列举类型之一的对象 optionalUnion: PropTypes.oneOfType([ PropTypes.string, PropTypes.number, PropTypes.instanceOf(Message) ]), }
- 指定所有内容类型的数组——数组所有内容必须都是number类型
MyComponent.propTypes = { // 一个指定元素类型的数组 optionalArrayOf: PropTypes.arrayOf(PropTypes.number), }
- 指定元素类型的对象——对象的内容必须都是number
MyComponent.propTypes = { // 一个指定类型的对象 optionalObjectOf: PropTypes.objectOf(PropTypes.number), }
- 指定属性及类型的对象——color必须是string 类型,fontSize是number类型
MyComponent.propTypes = { // 一个指定属性及其类型的对象 optionalObjectWithShape: PropTypes.shape({ color: PropTypes.string, fontSize: PropTypes.number }), }
- 检测内容是否存在——没有的话会打印警告信息
MyComponent.propTypes = { // 你也可以在任何 PropTypes 属性后面加上 `isRequired` // 后缀,这样如果这个属性父组件没有提供时,会打印警告信息 requiredFunc: PropTypes.func.isRequired, }
- 任意数据类型——随意类型都可以,但是内容要存在
MyComponent.propTypes = { // 任意类型的数据 requiredAny: PropTypes.any.isRequired, }
- 自定义验证器
MyComponent.propTypes = { // 你也可以指定一个自定义验证器。它应该在验证失败时返回 // 一个 Error 对象而不是 `console.warn` 或抛出异常。 // 不过在 `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: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) { if (!/matchme/.test(propValue[key])) { return new Error( ‘Invalid prop `‘ + propFullName + ‘` supplied to‘ + ‘ `‘ + componentName + ‘`. Validation failed.‘ ); } }) }
- element元素——1.是一个react元素 2.检测元素是否存在并且是个单个的子代
// 是一个react元素 MyComponent.propTypes = { optionalElement: PropTypes.element, } // 检测是否是个单个的子代 MyComponent.propTypes = { optionalElement: PropTypes.element.isRequired, }
- 属性默认值——添加默认值
class Greeting extends React.Component { render() { return ( <h1>Hello, {this.props.name}</h1> ); } } // 为属性指定默认值: Greeting.defaultProps = { name: ‘Stranger‘ }; // 渲染 "Hello, Stranger": ReactDOM.render( <Greeting />, document.getElementById(‘example‘) ); // 另外一种设置默认值的方法 static defaultProps = { name: ‘stranger‘ }
作者:TianYiYang
链接:https://www.jianshu.com/p/d1207c6edc61
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
以上是关于proptypes介绍的主要内容,如果未能解决你的问题,请参考以下文章