開始
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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。