注意:從React v15.5開始,
React.PropTypes
助手函數(shù)已被啟用润脸,建議使用prop-types庫來定義contextTypes
。
PropTypes
輸出了一系列的驗證器,可以用來確保接收到的參數(shù)是有效的枣申。例如嚷缭,我們可以使用PropTypes.string
語句饮亏。當(dāng)給 prop
傳遞了一個不正確的值時,JavaScript控制臺將會顯示一條警告阅爽。
使用目的
若你再之后的項目維護中或開發(fā)中路幸,修改了prop的屬性類型,則可以在控制臺中發(fā)現(xiàn)并改正付翁,從而可以避免造成不必要的bug简肴。
默認的 prop 值
可以通過賦值特定的defaultProps
屬性為props
定義默認值,如果父組件沒有為this.props.name
傳值,defaultProps
會給其一個默認值百侧。propTypes
的類型檢測是在defaultProps
解析之后發(fā)生的砰识,因此也會對默認屬性defaultProps
進行類型檢測。
import PropTypes from 'prop-types';
class Greeting extends React.Component {
render() {
return (
<h1>Hello, {this.props.name}</h1>
);
}
}
Greeting.propTypes = {
name: PropTypes.string
};
在本例中, 我們使用了 PropTypes.string
佣渴。當(dāng)傳入的 prop
值類型不正確時辫狼,JavaScript 控制臺將會顯示警告。出于性能的原因观话,propTypes
僅在開發(fā)模式中檢測予借。
defaultProps 用于確保 this.props.name 在父組件沒有指定其值時,有一個默認值频蛔。從而組件不會因為沒有值而變成空白或者報錯灵迫。propTypes 類型檢查發(fā)生在 defaultProps 賦值后,所以類型檢查也適用于 defaultProps晦溪。
PropTypes
以下提供了使用不同驗證器的例子:
import PropTypes from 'prop-types';
MyComponent.propTypes = {
optionalArray: PropTypes.array,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,
optionalNode: PropTypes.node,
optionalElement: PropTypes.element,
optionalMessage: PropTypes.instanceOf(Message),
optionalEnum: PropTypes.oneOf(['News', 'Photos']),
optionalUnion: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
PropTypes.instanceOf(Message)
]),
optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
optionalObjectOf: PropTypes.objectOf(PropTypes.number),
optionalObjectWithShape: PropTypes.shape({
color: PropTypes.string,
fontSize: PropTypes.number
}),
requiredFunc: PropTypes.func.isRequired,
requiredAny: PropTypes.any.isRequired
};