React中的PropTypes详解
什么是prop-types?prop代表父组件传递过来的值,types代表类型。简单来说就是用来校验父组件传递过来值的类型
propTypes用来规范props必须满足的类型,如果验证不通过将会有warn提示。
React PropTypes的种类有
1 React.PropTypes.array // 队列 2 3 React.PropTypes.bool.isRequired // Boolean 且必须 4 5 React.PropTypes.func // 函数 6 7 React.PropTypes.number // 数字 8 9 React.PropTypes.object // 对象 10 11 React.PropTypes.string // 字符串 12 13 React.PropTypes.node // 任何类型的: numbers, strings, elements 或者数组 14 15 React.PropTypes.element // React 元素 16 17 React.PropTypes.instanceOf(XXX) // 某种XXX类型的对象 18 19 React.PropTypes.oneOf(['foo', 'bar']) // 其中的一个字符串 20 21 React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.array]) // 其中的一种类型 22 23 React.PropTypes.arrayOf(React.PropTypes.string) // 某种类型的数组(字符串) 24 25 React.PropTypes.objectOf(React.PropTypes.string) // 元素是字符串的对象 26 27 React.PropTypes.shape({ // 是否符合指定格式的对象 28 29 color: React.PropTypes.string, 30 fontSize: React.PropTypes.number 31 }); 32 React.PropTypes.any.isRequired // 可以是任何格式,且必要。 33 34 35 // 自定义格式,不符合的时候放回Error 36 37 // 不要用`console.warn` 或者 throw, 因为它在`oneOfType` 的情况下无效 38 39 40 customPropType: function(props, propName, componentName) { 41 if (!/^[0-9]/.test(props[propName])) { 42 return new Error('Validation failed!'); 43 } 44 }
随着应用程序的增长,你可以用类型检查找到更多错误。你可以为你的应用使用第三方类型检查库,如:Flow、TypeScript 等。你也可以不使用它们,因为React内嵌了一些类型检查功能。你可以设置组件的指定属性
propTypes
,为组件添加类型检查的能力。import PropTypes from 'prop-types'; class Greeting extends React.Component { render() { return ( <h1>Hello, {this.props.name}</h1> ); } } Greeting.propTypes = { name: PropTypes.string };