这篇文章其实主要内容都是官方文档上的原始例子,但是为什么我还要写呢,一是为了给自己做个笔记,二就是....打死不看官方文档系列(比如我)
开始
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,
}
- 检测是不是能被渲染的元素,function就不能被渲染
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 (
Hello, {this.props.name}
);
}
}
// 为属性指定默认值:
Greeting.defaultProps = {
name: 'Stranger'
};
// 渲染 "Hello, Stranger":
ReactDOM.render(
,
document.getElementById('example')
);
// 另外一种设置默认值的方法
static defaultProps = {
name: 'stranger'
}
有疑问请评论,我看到会立即回复的。