7-React 組件之 props 驗(yàn)證

React.js

[TOC]

props 驗(yàn)證

隨著應(yīng)用的不斷增長(zhǎng)涩笤,也是為了使程序設(shè)計(jì)更加嚴(yán)謹(jǐn)刺桃,我們通常需要對(duì)數(shù)據(jù)的類型(值)進(jìn)行一些必要的驗(yàn)證匈睁,<u>React.js</u> 提供了一個(gè)驗(yàn)證庫(kù):<u>prop-types</u>

prop-types

<u>prop-types</u> 是一個(gè)獨(dú)立的庫(kù),需要安裝

https://www.npmjs.com/package/prop-types

安裝

npm i -S prop-types

使用

import PropTypes from 'prop-types';

它的使用并不復(fù)雜蛋辈,與 <u>defaultProps</u> 類似属拾,我們?cè)诮M件類下添加一個(gè)靜態(tài)屬性 <u>propTypes</u> ,它的值也是一個(gè)對(duì)象冷溶,<u>key</u> 是要驗(yàn)證的屬性名稱渐白,<u>value</u> 是驗(yàn)證規(guī)則

MyComponent.propTypes = {
  // You can declare that a prop is a specific JS primitive. By default, these
  // are all optional.
  optionalArray: PropTypes.array,
  optionalBool: PropTypes.bool,
  optionalFunc: PropTypes.func,
  optionalNumber: PropTypes.number,
  optionalObject: PropTypes.object,
  optionalString: PropTypes.string,
  optionalSymbol: PropTypes.symbol,
 
  // Anything that can be rendered: numbers, strings, elements or an array
  // (or fragment) containing these types.
  optionalNode: PropTypes.node,
 
  // A React element (ie. <MyComponent />).
  optionalElement: PropTypes.element,
 
  // A React element type (ie. MyComponent).
  optionalElementType: PropTypes.elementType,
 
  // You can also declare that a prop is an instance of a class. This uses
  // JS's instanceof operator.
  optionalMessage: PropTypes.instanceOf(Message),
 
  // You can ensure that your prop is limited to specific values by treating
  // it as an enum.
  optionalEnum: PropTypes.oneOf(['News', 'Photos']),
 
  // An object that could be one of many types
  optionalUnion: PropTypes.oneOfType([
    PropTypes.string,
    PropTypes.number,
    PropTypes.instanceOf(Message)
  ]),
 
  // An array of a certain type
  optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
 
  // An object with property values of a certain type
  optionalObjectOf: PropTypes.objectOf(PropTypes.number),
 
  // You can chain any of the above with `isRequired` to make sure a warning
  // is shown if the prop isn't provided.
 
  // An object taking on a particular shape
  optionalObjectWithShape: PropTypes.shape({
    optionalProperty: PropTypes.string,
    requiredProperty: PropTypes.number.isRequired
  }),
 
  // An object with warnings on extra properties
  optionalObjectWithStrictShape: PropTypes.exact({
    optionalProperty: PropTypes.string,
    requiredProperty: PropTypes.number.isRequired
  }),
 
  requiredFunc: PropTypes.func.isRequired,
 
  // A value of any data type
  requiredAny: PropTypes.any.isRequired,
 
  // You can also specify a custom validator. It should return an Error
  // object if the validation fails. Don't `console.warn` or throw, as this
  // won't work inside `oneOfType`.
  customProp: function(props, propName, componentName) {
    if (!/matchme/.test(props[propName])) {
      return new Error(
        'Invalid prop `' + propName + '` supplied to' +
        ' `' + componentName + '`. Validation failed.'
      );
    }
  },
 
  // You can also supply a custom validator to `arrayOf` and `objectOf`.
  // It should return an Error object if the validation fails. The validator
  // will be called for each key in the array or object. The first two
  // arguments of the validator are the array or object itself, and the
  // current item's key.
  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.'
      );
    }
  })
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逞频,隨后出現(xiàn)的幾起案子纯衍,更是在濱河造成了極大的恐慌,老刑警劉巖苗胀,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件托酸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡柒巫,警方通過(guò)查閱死者的電腦和手機(jī)励堡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)堡掏,“玉大人应结,你說(shuō)我怎么就攤上這事。” “怎么了鹅龄?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵揩慕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我扮休,道長(zhǎng)迎卤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任玷坠,我火速辦了婚禮蜗搔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘八堡。我一直安慰自己樟凄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布兄渺。 她就那樣靜靜地躺著缝龄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挂谍。 梳的紋絲不亂的頭發(fā)上叔壤,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音口叙,去河邊找鬼炼绘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛庐扫,可吹牛的內(nèi)容都是我干的饭望。 我是一名探鬼主播仗哨,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼形庭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了厌漂?” 一聲冷哼從身側(cè)響起萨醒,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苇倡,沒(méi)想到半個(gè)月后富纸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旨椒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年晓褪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片综慎。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涣仿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情好港,我是刑警寧澤愉镰,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站钧汹,受9級(jí)特大地震影響丈探,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拔莱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一碗降、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辨宠,春花似錦遗锣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赋兵,卻和暖如春笔咽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霹期。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工叶组, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人历造。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓甩十,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吭产。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侣监,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容