PropTypes
propTypes
允许你指定组件需要的 props
以及它们应该是什么类型。你的组件无需设置 propTypes
即可工作,但最好定义这些组件,因为它会使你的组件更具可读性,作为正在阅读组件的其他开发人员的文档,在开发过程中,如果你尝试使用 React,它会发出警告设置一个与你为其设置的定义不同的道具。
一些原始的 propTypes
和通常可用的 propTypes
是 -
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
如果将 isRequired
附加到任何 propType
,则必须在创建该组件的实例时提供该 prop。如果你未提供所需的 propTypes
,则无法创建组件实例。
句法
ES5
var MyClass = React.createClass({
propTypes: {
randomObject: React.PropTypes.object,
callback: React.PropTypes.func.isRequired,
...
}
}
ES6
class MyClass extends React.Component {...}
MyClass.propTypes = {
randomObject: React.PropTypes.object,
callback: React.PropTypes.func.isRequired,
...
};
ES7
class MyClass extends React.Component {
static propTypes = {
randomObject: React.PropTypes.object,
callback: React.PropTypes.func.isRequired,
...
};
}
更复杂的道具验证
同样,PropTypes
允许你指定更复杂的验证
验证对象
...
randomObject: React.PropTypes.shape({
id: React.PropTypes.number.isRequired,
text: React.PropTypes.string,
}).isRequired,
...
验证对象数组
...
arrayOfObjects: React.PropTypes.arrayOf(React.PropTypes.shape({
id: React.PropTypes.number.isRequired,
text: React.PropTypes.string,
})).isRequired,
...