深入了解Vue3組件 | 組件的Props

此處分為以下5個(gè)部分講

image.png

屬性的類型

在組件配置項(xiàng)props中,可以以字符串?dāng)?shù)組形式列出的組件的屬性

舉例??:添加一個(gè)自定義屬性author,并在props中列出來

動(dòng)畫6.gif

也可以在props中,以對(duì)象的形式為每個(gè)屬性指定值類型

舉例??:將author的類型設(shè)置為字符串

動(dòng)畫7.gif

指定屬性類型的好處

  • 相當(dāng)于為組件提供了文檔
  • 當(dāng)輸入錯(cuò)誤類型時(shí)侄旬,瀏覽器的控制臺(tái)會(huì)給予提示

靜態(tài)屬性和動(dòng)態(tài)屬性

傳遞靜態(tài)屬性

如上例所森,在使用組件時(shí),直接在組件上添加屬性author冬耿,并可以為屬性傳遞一個(gè)靜態(tài)屬性值LBJ

傳遞動(dòng)態(tài)屬性

在使用組件時(shí),可以使用v-bind為屬性動(dòng)態(tài)賦值

可以賦值為一個(gè)數(shù)字萌壳、布爾值亦镶、數(shù)組、對(duì)象等

舉例??:為組件添加一個(gè)動(dòng)態(tài)屬性like讶凉,值為數(shù)字

動(dòng)畫8.gif

可以使用不帶參數(shù)的 v-bind染乌,將一個(gè)對(duì)象的所有 property 都作為組件的 prop 傳入

舉例??:在自定義組件my-component上使用v-bind,不帶參數(shù)

動(dòng)畫9.gif

可以看到最終的結(jié)果懂讯,傳入的對(duì)象被展開了

單項(xiàng)數(shù)據(jù)流

父級(jí)組件的更新 prop 會(huì)向下流動(dòng)到子組件荷憋,反之則不行,Vue會(huì)發(fā)出警告

舉例??:在子組件中修改title的數(shù)據(jù)

動(dòng)畫10.gif

可以看到報(bào)錯(cuò)了:Vue warn]: Attempting to mutate prop "title". Props are readonly.

這其實(shí)時(shí)好的褐望,防止子組件意外變更父級(jí)組件的狀態(tài)勒庄,從而導(dǎo)致應(yīng)用的數(shù)據(jù)流向難以理解

當(dāng)父級(jí)組件的prop值發(fā)生變更,子組件中所有的 prop 都將會(huì)刷新為最新的值

如果真的想在子組件內(nèi)部改變 prop瘫里,官方提供了兩種可能的情形实蔽,及對(duì)應(yīng)的做法

情形1:這個(gè) prop 傳遞一個(gè)初始值作為子組件的一個(gè)本地?cái)?shù)據(jù)

推薦做法:在子組件的data中聲明一個(gè)屬性,值為prop的值

舉例??:父級(jí)組件傳遞initialCounter谨读,子組件聲明另外一個(gè)變量局装,將initialCounter的值賦值過去

動(dòng)畫11.gif

以后如果要修改,就直接修改counter

情形2:這個(gè) prop 傳遞一個(gè)初始值需要在子組件中進(jìn)行計(jì)算或轉(zhuǎn)換

推薦做法:在子組件中定義一個(gè)對(duì)應(yīng)的計(jì)算屬性

舉例??:父組件傳遞size,子組件通過計(jì)算屬性重新計(jì)算出一個(gè)值normalizedSize

動(dòng)畫12.gif

特別注意铐尚,對(duì)于一個(gè)數(shù)組或?qū)ο箢愋偷?prop拨脉,在子組件中變更這個(gè)對(duì)象或數(shù)組本身,將會(huì)影響到父組件

屬性驗(yàn)證

屬性驗(yàn)證有利于給使用組件的人提供幫助

屬性驗(yàn)證方式

指定驗(yàn)證的方式宣增,只要給組件的配置項(xiàng)props提供一個(gè)特定對(duì)象玫膀,對(duì)象的屬性名即使組件prop,值為對(duì)應(yīng)的驗(yàn)證

舉例??:以下多種驗(yàn)證方式

動(dòng)畫13.gif

propA: Number表示propA的值類型是Number

propB: [String, Number]表示propB的值類型是String或Number

propC: {type: String,required: true} 表示類型為String且必填

除此之外以上展示的爹脾,還有其他的驗(yàn)證方式:

propD: {type: Number,default: 1}表示類型為Number且有默認(rèn)值

propE: {type: Object,default() {return {message: 'hello' }}}表示默認(rèn)值為對(duì)象帖旨,注意:對(duì)象或數(shù)組默認(rèn)值必須從一個(gè)函數(shù)獲取

propF: {validator(value) {return ['success','warning', 'danger'].includes(value)}}表示自定義驗(yàn)證函數(shù)

propG:{type:Function,default(){return 'xxx' }}表示類型為函數(shù)且?guī)J(rèn)值
開發(fā)環(huán)境中,當(dāng) prop 驗(yàn)證失敗時(shí)灵妨,Vue會(huì)發(fā)出警告

注意:屬性驗(yàn)證會(huì)在組件實(shí)例創(chuàng)建之前進(jìn)行驗(yàn)證解阅,因此所有的組件實(shí)例的property如data、computed 等闷串, 在 default 或 validator 函數(shù)中是不可用的

type的類型

可以是下列原生構(gòu)造函數(shù)中的一個(gè):String瓮钥、Number筋量、Boolean烹吵、Array、Object桨武、Date肋拔、Function、Symbol

也可以是一個(gè)自定義的構(gòu)造函數(shù)

舉例??:使用自定義構(gòu)造函數(shù)作為類型

動(dòng)畫14.gif

Prop的大小寫命名

HTML中的attribute名是大小寫不敏感呀酸,所以瀏覽器會(huì)把所有大寫字符解釋為小寫

因此凉蜂,在組件注冊時(shí),prop名使用camelCase (駝峰命名法)性誉,prop的名需要使用與HTML中等價(jià)的寫法

舉例??:使用在注冊組件時(shí)窿吩,prop名是camelCase

動(dòng)畫15.gif

如果在字符串模板使用,則沒有這個(gè)限制错览,既可以使用camelCase也可以使用kebab-case

小結(jié)

為了方便纫雁,我將注冊Props相關(guān)內(nèi)容匯總為一圖

2組件Props.png

為了方便批量下載,我將相關(guān)的高清思維導(dǎo)圖及源文件上傳至GitHub倾哺,可移步下載:https://github.com/jCodeLife/mind-map

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末轧邪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子羞海,更是在濱河造成了極大的恐慌忌愚,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件却邓,死亡現(xiàn)場離奇詭異硕糊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門简十,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衙耕,“玉大人,你說我怎么就攤上這事勺远〕却” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵胶逢,是天一觀的道長厅瞎。 經(jīng)常有香客問我,道長初坠,這世上最難降的妖魔是什么和簸? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮碟刺,結(jié)果婚禮上锁保,老公的妹妹穿的比我還像新娘。我一直安慰自己半沽,他們只是感情好爽柒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著者填,像睡著了一般浩村。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上占哟,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天心墅,我揣著相機(jī)與錄音,去河邊找鬼榨乎。 笑死怎燥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜜暑。 我是一名探鬼主播铐姚,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼史煎!你這毒婦竟也來了谦屑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤篇梭,失蹤者是張志新(化名)和其女友劉穎氢橙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恬偷,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悍手,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坦康。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡竣付,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滞欠,到底是詐尸還是另有隱情古胆,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布筛璧,位于F島的核電站逸绎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏夭谤。R本人自食惡果不足惜棺牧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朗儒。 院中可真熱鬧颊乘,春花似錦、人聲如沸醉锄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榆鼠。三九已至纲爸,卻和暖如春亥鸠,著一層夾襖步出監(jiān)牢的瞬間妆够,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工负蚊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留神妹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓家妆,卻偏偏與公主長得像鸵荠,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子伤极,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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