React使用PropTypes實(shí)現(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 值類型不正確時(shí),JavaScript 控制臺(tái)將會(huì)顯示警告
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, // 一個(gè) React 元素。 optionalElement: PropTypes.element, // 一個(gè) React 元素類型(即,MyComponent)。 optionalElementType: PropTypes.elementType, // 你也可以聲明 prop 為類的實(shí)例,這里使用 // JS 的 instanceof 操作符。 optionalMessage: PropTypes.instanceOf(Message), // 你可以讓你的 prop 只能是特定的值,指定它為 // 枚舉類型。 optionalEnum: PropTypes.oneOf(['News', 'Photos']), // 一個(gè)對(duì)象可以是幾種類型中的任意一個(gè)類型 optionalUnion: PropTypes.oneOfType([ PropTypes.string, PropTypes.number, PropTypes.instanceOf(Message) ]), // 可以指定一個(gè)數(shù)組由某一類型的元素組成 optionalArrayOf: PropTypes.arrayOf(PropTypes.number), // 可以指定一個(gè)對(duì)象由某一類型的值組成 optionalObjectOf: PropTypes.objectOf(PropTypes.number), // 可以指定一個(gè)對(duì)象由特定的類型值組成 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` ,確保 // 這個(gè) prop 沒有被提供時(shí),會(huì)打印警告信息。 requiredFunc: PropTypes.func.isRequired, // 任意類型的數(shù)據(jù) requiredAny: PropTypes.any.isRequired, // 你可以指定一個(gè)自定義驗(yàn)證器。它在驗(yàn)證失敗時(shí)應(yīng)返回一個(gè) Error 對(duì)象。 // 請(qǐng)不要使用 `console.warn` 或拋出異常,因?yàn)檫@在 `onOfType` 中不會(huì)起作用。 customProp: function(props, propName, componentName) { if (!/matchme/.test(props[propName])) { return new Error( 'Invalid prop `' + propName + '` supplied to' + ' `' + componentName + '`. Validation failed.' ); } }, // 你也可以提供一個(gè)自定義的 `arrayOf` 或 `objectOf` 驗(yàn)證器。 // 它應(yīng)該在驗(yàn)證失敗時(shí)返回一個(gè) Error 對(duì)象。 // 驗(yàn)證器將驗(yàn)證數(shù)組或?qū)ο笾械拿總€(gè)值。驗(yàn)證器的前兩個(gè)參數(shù) // 第一個(gè)是數(shù)組或?qū)ο蟊旧? // 第二個(gè)是他們當(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.' ); } }) };
限制單個(gè)元素
通過 PropTypes.element 來確保傳遞給組件的 children 中只包含一個(gè)元素
import PropTypes from 'prop-types'; class MyComponent extends React.Component { render() { // 這必須只有一個(gè)元素,否則控制臺(tái)會(huì)打印警告。 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 在父組件沒有指定其值時(shí),有一個(gè)默認(rèn)值。propTypes 類型檢查發(fā)生在 defaultProps 賦值后,所以類型檢查也適用于 defaultProps。
到此這篇關(guān)于React使用PropTypes實(shí)現(xiàn)類型檢查功能的文章就介紹到這了,更多相關(guān)React PropTypes類型檢查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React class和function的區(qū)別小結(jié)
Class組件和Function組件是React中創(chuàng)建組件的兩種主要方式,本文主要介紹了React class和function的區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10React Native第三方平臺(tái)分享的實(shí)例(Android,IOS雙平臺(tái))
本篇文章主要介紹了React Native第三方平臺(tái)分享的實(shí)例(Android,IOS雙平臺(tái)),具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08React實(shí)現(xiàn)歌詞滾動(dòng)效果(跟隨音樂播放時(shí)間滾動(dòng))
這篇文章主要為大家詳細(xì)介紹了React實(shí)現(xiàn)歌詞滾動(dòng)效果(跟隨音樂播放使勁按滾動(dòng)),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2024-02-02基于react項(xiàng)目打包c(diǎn)ss引用路徑錯(cuò)誤解決方案
這篇文章主要介紹了基于react項(xiàng)目打包c(diǎn)ss引用路徑錯(cuò)誤解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10react項(xiàng)目從新建到部署的實(shí)現(xiàn)示例
這篇文章主要介紹了react項(xiàng)目從新建到部署的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02React引入css的幾種方式及應(yīng)用小結(jié)
這篇文章主要介紹了React引入css的幾種方式及應(yīng)用小結(jié),操作styled組件的樣式屬性,可在組件標(biāo)簽上定義屬性、也可以通過attrs定義屬性,本文通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03