React使用PropTypes實現(xiàn)類型檢查功能
使用 PropTypes 進(jìn)行類型檢查
- react 內(nèi)置類型檢查功能
- 要在組件的 props 上進(jìn)行類型檢查,你只需配置特定的 propTypes 屬性
- propTypes 僅在開發(fā)模式下進(jìn)行檢查
import PropTypes from 'prop-types' class Greeting extends React.Component { render() { return ( <h1>Hello, {this.props.name}</h1> ); } } Greeting.propTypes = { name: PropTypes.string } // 當(dāng)傳入的 prop 值類型不正確時,JavaScript 控制臺將會顯示警告
PropTypes
import PropTypes from 'prop-types'; MyComponent.propTypes = { // 你可以將屬性聲明為 JS 原生類型,默認(rèn)情況下 // 這些屬性都是可選的。 optionalArray: PropTypes.array, optionalBool: PropTypes.bool, optionalFunc: PropTypes.func, optionalNumber: PropTypes.number, optionalObject: PropTypes.object, optionalString: PropTypes.string, optionalSymbol: PropTypes.symbol, // 任何可被渲染的元素(包括數(shù)字、字符串、元素或數(shù)組) // (或 Fragment) 也包含這些類型。 optionalNode: PropTypes.node, // 一個 React 元素。 optionalElement: PropTypes.element, // 一個 React 元素類型(即,MyComponent)。 optionalElementType: PropTypes.elementType, // 你也可以聲明 prop 為類的實例,這里使用 // JS 的 instanceof 操作符。 optionalMessage: PropTypes.instanceOf(Message), // 你可以讓你的 prop 只能是特定的值,指定它為 // 枚舉類型。 optionalEnum: PropTypes.oneOf(['News', 'Photos']), // 一個對象可以是幾種類型中的任意一個類型 optionalUnion: PropTypes.oneOfType([ PropTypes.string, PropTypes.number, PropTypes.instanceOf(Message) ]), // 可以指定一個數(shù)組由某一類型的元素組成 optionalArrayOf: PropTypes.arrayOf(PropTypes.number), // 可以指定一個對象由某一類型的值組成 optionalObjectOf: PropTypes.objectOf(PropTypes.number), // 可以指定一個對象由特定的類型值組成 optionalObjectWithShape: PropTypes.shape({ color: PropTypes.string, fontSize: PropTypes.number }), // An object with warnings on extra properties optionalObjectWithStrictShape: PropTypes.exact({ name: PropTypes.string, quantity: PropTypes.number }), // 你可以在任何 PropTypes 屬性后面加上 `isRequired` ,確保 // 這個 prop 沒有被提供時,會打印警告信息。 requiredFunc: PropTypes.func.isRequired, // 任意類型的數(shù)據(jù) requiredAny: PropTypes.any.isRequired, // 你可以指定一個自定義驗證器。它在驗證失敗時應(yīng)返回一個 Error 對象。 // 請不要使用 `console.warn` 或拋出異常,因為這在 `onOfType` 中不會起作用。 customProp: function(props, propName, componentName) { if (!/matchme/.test(props[propName])) { return new Error( 'Invalid prop `' + propName + '` supplied to' + ' `' + componentName + '`. Validation failed.' ); } }, // 你也可以提供一個自定義的 `arrayOf` 或 `objectOf` 驗證器。 // 它應(yīng)該在驗證失敗時返回一個 Error 對象。 // 驗證器將驗證數(shù)組或?qū)ο笾械拿總€值。驗證器的前兩個參數(shù) // 第一個是數(shù)組或?qū)ο蟊旧? // 第二個是他們當(dāng)前的鍵。 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.' ); } }) };
限制單個元素
通過 PropTypes.element 來確保傳遞給組件的 children 中只包含一個元素
import PropTypes from 'prop-types'; class MyComponent extends React.Component { render() { // 這必須只有一個元素,否則控制臺會打印警告。 const children = this.props.children; return ( <div> {children} </div> ); } } MyComponent.propTypes = { children: PropTypes.element.isRequired };
默認(rèn) Prop 值
可以通過配置特定的 defaultProps 屬性來定義 props 的默認(rèn)值
class Greeting extends React.Component { render() { return ( <h1>Hello, {this.props.name}</h1> ); } } // 指定 props 的默認(rèn)值: Greeting.defaultProps = { name: 'Stranger' }; // 渲染出 "Hello, Stranger": ReactDOM.render( <Greeting />, document.getElementById('example') );
defaultProps 用于確保 this.props.name 在父組件沒有指定其值時,有一個默認(rèn)值。propTypes 類型檢查發(fā)生在 defaultProps 賦值后,所以類型檢查也適用于 defaultProps。
到此這篇關(guān)于React使用PropTypes實現(xiàn)類型檢查功能的文章就介紹到這了,更多相關(guān)React PropTypes類型檢查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React class和function的區(qū)別小結(jié)
Class組件和Function組件是React中創(chuàng)建組件的兩種主要方式,本文主要介紹了React class和function的區(qū)別小結(jié),具有一定的參考價值,感興趣的可以了解一下2023-10-10React Native第三方平臺分享的實例(Android,IOS雙平臺)
本篇文章主要介紹了React Native第三方平臺分享的實例(Android,IOS雙平臺),具有一定的參考價值,有興趣的可以了解一下2017-08-08React實現(xiàn)歌詞滾動效果(跟隨音樂播放時間滾動)
這篇文章主要為大家詳細(xì)介紹了React實現(xiàn)歌詞滾動效果(跟隨音樂播放使勁按滾動),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2024-02-02React引入css的幾種方式及應(yīng)用小結(jié)
這篇文章主要介紹了React引入css的幾種方式及應(yīng)用小結(jié),操作styled組件的樣式屬性,可在組件標(biāo)簽上定義屬性、也可以通過attrs定義屬性,本文通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03