深入淺析Vue中的Prop
Prop
基本用法
Prop的基本用法很簡單,只需要在子組件的Vue實(shí)例中定義該屬性并把值設(shè)為目標(biāo)屬性的數(shù)組即可
Vue.component('child', { ... // 接收message props: ['message'] ... })
tips:由于HTML中的屬性是不區(qū)分大小寫的,所以當(dāng)使用DOM中的模板(HTML中)時(shí),駝峰寫法需要轉(zhuǎn)化為短橫線寫法。但是,如果使用字符串模板(JS中)時(shí),不受限制,可以為所欲為。
Prop中的靜態(tài)和動(dòng)態(tài)值
在正常情況下,一般在父組件中通過v-bind定義一個(gè)動(dòng)態(tài)值,子組件通過Prop接收該值,所以,很多人認(rèn)為,Prop只能接收動(dòng)態(tài)值。但是,其實(shí)Prop可以接受靜態(tài)屬性。
示例:
/* 父組件 */ <child type="video"></child> /* 子組件 */ Vue.component('child', { ... // 成功接收 props: ['type'] ... })
在示例中,父組件在子組件標(biāo)簽上定義了靜態(tài)屬性type,子組件依然通過Prop拿到了靜態(tài)屬性type。
單向數(shù)據(jù)流
所有的 prop 都使得其父子 prop 之間形成了一個(gè)單向下行綁定:父組件的 Prop 的更新會(huì)向下流動(dòng)到子組件中,但是反過來則不行。這樣會(huì)防止從子組件意外改變父組件以及同級(jí)子組件的狀態(tài),從而導(dǎo)致你的應(yīng)用的數(shù)據(jù)流向難以理解。
另外,每次父組件發(fā)生更新時(shí),子組件中所有的Prop都將刷新為最新的值。這意味著你不應(yīng)該在子組件內(nèi)部改變Prop,如果你這樣做了,Vue會(huì)在控制臺(tái)拋出一個(gè)警告。
一般來說,如果子組件需要操作Prop中的值,需要將Prop中的值賦值給本地定義的屬性:
... props: ['message'], data () { return { mes: this.message } } ...
非Prop特性
非Props特性是指在組件上定義了屬性,而又沒有使用Prop接受屬性。此時(shí),子組件內(nèi)不可使用該屬性值,該屬性會(huì)直接添加到子組件的根節(jié)點(diǎn)上。
比如,在一個(gè)只含有一個(gè)div的子組件上,如果我向子組件傳了一個(gè)content屬性,但是子組件不使用Prop接收content屬性,則渲染結(jié)果為:
<div id="root"> <div content="hello"></div> </div>
Prop校驗(yàn)
子組件用Props接收父組件傳來的消息有多種形式:
1.數(shù)組形式
props: [data1, data2]
數(shù)組形式相當(dāng)于直接接收消息,不做任何校驗(yàn),一般來說,不太建議使用數(shù)組形式。
2.簡單對象形式
props: { data1: String, data2: Array }
簡單對象形式對父組件傳遞的值進(jìn)行了類型校驗(yàn),如果傳過來的值類型不一致,控制臺(tái)會(huì)報(bào)錯(cuò)。
3.復(fù)雜對象形式
props: { data1: { type: String, required: true, default: 'default value', validator (value) { return (value.length < 5) } }, data2: { type: Array, required: true, default: () => ['', '', ''] } }
復(fù)雜對象形式的情況下,作為對象屬性的參數(shù)可以寫為對象形式,參數(shù)對象含有4個(gè)屬性,type、required、default、validator。
type:設(shè)定參數(shù)類型,當(dāng)傳入?yún)?shù)類型與type不相符時(shí),控制臺(tái)會(huì)報(bào)錯(cuò)
required:設(shè)定參數(shù)是否是必傳,當(dāng)設(shè)為true時(shí),不傳該參數(shù)會(huì)報(bào)錯(cuò)
default:設(shè)定默認(rèn)值,當(dāng)參數(shù)類型為復(fù)雜類型時(shí),需使用工廠模式生成默認(rèn)值,否則Vue會(huì)在控制臺(tái)拋出警告。如圖所示,就通過工廠模式生成了一個(gè)長度為3的空數(shù)組。
validator:校驗(yàn)器,是一個(gè)函數(shù),擁有一個(gè)代表傳入值的形參,可以自定義各種校驗(yàn),當(dāng)返回false時(shí),會(huì)報(bào)錯(cuò),表示沒通過校驗(yàn)。
相關(guān)文章
Vue實(shí)現(xiàn)頁面的局部刷新(router-view頁面刷新)
本文主要介紹了Vue實(shí)現(xiàn)頁面的局部刷新(router-view頁面刷新),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12vue+canvas實(shí)現(xiàn)炫酷時(shí)鐘效果的倒計(jì)時(shí)插件(已發(fā)布到npm的vue2插件,開箱即用)
這篇文章主要介紹了vue+canvas實(shí)現(xiàn)炫酷時(shí)鐘效果的倒計(jì)時(shí)插件(已發(fā)布到npm的vue2插件,開箱即用) ,需要的朋友可以參考下2018-11-11vue項(xiàng)目實(shí)現(xiàn)m3u8流媒體播放詳細(xì)圖文教程
m3u8是一種常用的視頻流媒體格式,通常用于在Web上播放視頻,這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目實(shí)現(xiàn)m3u8流媒體播放的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09element-ui表單提交自動(dòng)清空隱藏表單值實(shí)現(xiàn)
這篇文章主要為大家介紹了element-ui表單提交自動(dòng)清空隱藏表單值實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Vue計(jì)算屬性與監(jiān)視屬性詳細(xì)分析使用
computed是vue的配置選項(xiàng),它的值是一個(gè)對象,其中可定義多個(gè)計(jì)算屬性,每個(gè)計(jì)算屬性就是一個(gè)函數(shù),下面這篇文章主要給大家介紹了關(guān)于vue中計(jì)算屬性computed的詳細(xì)講解,需要的朋友可以參考下2022-11-11vue之el-upload使用FormData多文件同時(shí)上傳問題
這篇文章主要介紹了vue之el-upload使用FormData多文件同時(shí)上傳問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05vue的props實(shí)現(xiàn)子組件隨父組件一起變化
這篇文章主要為大家詳細(xì)介紹了vue的props如何實(shí)現(xiàn)子組件隨父組件一起變化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10