VUE3之Non-Props屬性的具體使用
1. 概述
墨菲定律告訴我們:人總是容易犯錯誤的,無論科技發(fā)展到什么程度,無論是什么身份的人,錯誤總是會在不經(jīng)意間發(fā)生。因此我們最好在做重要的事情時,盡量去預(yù)估所有可能發(fā)生的錯誤,并思考錯誤發(fā)生后的補(bǔ)救方案,再準(zhǔn)備一個或多個備選方案。這樣才能做到有備無患,防患于未來。
言歸正傳,之前我們聊了組件的傳參,今天我們來聊一下Non-Props 屬性,Non-Props 這個詞,不了解的同學(xué)一定覺得很高深,其實(shí)很簡單,之前講的組件傳參,子組件會使用 props:[''] 的方式接收父組件傳遞的參數(shù),如果子組件不使用props:['']接收參數(shù),那這個參數(shù)就是一個Non-Props 屬性。下面我們通過例子來詳細(xì)看一下。
2.Non-Props 屬性
2.1 初識Non-Props 屬性
<body>
<div id="myDiv"></div>
</body>
<script>
const app = Vue.createApp({
template:`
<div>
<test message="hello" />
</div>
`
});
app.component("test", {
template:`
<div>123</div>
`
});
const vm = app.mount("#myDiv");這個例子中,雖然主組件在使用 test 子組件時,傳了 message 參數(shù),但子組件沒有接收,會發(fā)生什么事情,看下面截圖:

最后渲染時,把 message = "hello" 原封不動的渲染到了 test 子組件的最外層標(biāo)簽上
2.2 不想把Non-Props 屬性 渲染到最外層標(biāo)簽
我們希望我不接收的屬性,就是不接收,不要渲染到最外層標(biāo)簽
app.component("test", {
inheritAttrs:false,
template:`
<div>123</div>
`
});在子組件中增加屬性inheritAttrs:false,Non-Props 屬性就不會渲染到最外層標(biāo)簽了

2.3Non-Props 屬性的使用場景
大家可能會問,這個屬性子組件不需要,VUE 還硬放到子組件的最外層元素,這是為什么,有什么用呢,我們來看下面的例子
const app = Vue.createApp({
template:`
<div>
<test style="color:red" />
</div>
`
});
app.component("test", {
template:`
<div>123</div>
`
});

從這個例子就能看出,當(dāng)父組件想為子組件添加樣式時,使用Non-Props 屬性 就非常合適,也適合于其他單純傳遞屬性的場景。
2.4 子組件有多個最外層標(biāo)簽
剛才講了,Non-Props 屬性 會往子組件最外層的標(biāo)簽渲染屬性,當(dāng)子組件有多個最外層標(biāo)簽時,VUE 會如何渲染呢,看下面的例子
const app = Vue.createApp({
template:`
<div>
<test style="color:red" class="myClass" />
</div>
`
});
app.component("test", {
template:`
<div>123</div>
<div>456</div>
<div>789</div>
`
});
三個最外層標(biāo)簽都沒有父組件傳遞的屬性,VUE 不知道該給哪個標(biāo)簽渲染,干脆就不渲染了
2.5 為某個最外層標(biāo)簽渲染
如果我們希望某個標(biāo)簽可以拿到父組件的屬性,可以這樣寫
const app = Vue.createApp({
template:`
<div>
<test style="color:red" class="myClass" />
</div>
`
});
app.component("test", {
template:`
<div>123</div>
<div v-bind="$attrs" >456</div>
<div>789</div>
`
});
使用 v-bind="$attrs",讓 VUE 知道這個標(biāo)簽需要父組件的屬性
2.6 獲取父組件傳遞的某一個屬性
上面的例子,子組件中間的 div 標(biāo)簽被渲染了父組件傳遞的所有屬性,如果這個標(biāo)簽只需要的其中一個或幾個屬性,可以這么寫
const app = Vue.createApp({
template:`
<div>
<test style="color:red" class="myClass" />
</div>
`
});
app.component("test", {
template:`
<div>123</div>
<div :style="$attrs.style" >456</div>
<div>789</div>
`
});
這樣,中間的 div 只被渲染了 style 屬性,而沒有 class 屬性
2.7 生命周期函數(shù)獲取Non-Props 屬性
子組件的生命周期函數(shù),也是可以獲取Non-Props 屬性的,我們來看下面的例子
app.component("test", {
mounted() {
console.info(this.$attrs.class);
},
template:`
<div>123</div>
<div :style="$attrs.style" >456</div>
<div>789</div>
`
});
3. 綜述
到此這篇關(guān)于VUE3 之 Non-Props 屬性的文章就介紹到這了,更多相關(guān)VUE3 之 Non-Props 屬性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue+axios?methods方法return取不到值問題及解決
這篇文章主要介紹了vue+axios?methods方法return取不到值問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
Vue組件模板形式實(shí)現(xiàn)對象數(shù)組數(shù)據(jù)循環(huán)為樹形結(jié)構(gòu)(實(shí)例代碼)
這篇文章主要介紹了Vue組件模板形式實(shí)現(xiàn)對象數(shù)組數(shù)據(jù)循環(huán)為樹形結(jié)構(gòu),本文用vue實(shí)現(xiàn)方式,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-07-07
Vue開發(fā)實(shí)現(xiàn)滑動驗(yàn)證組件
這篇文章主要為大家詳細(xì)介紹了如何利用Vue開發(fā)實(shí)現(xiàn)簡單的滑動驗(yàn)證組件,并且適配移動和PC,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-07-07

