vue3中defineProps及使用方法詳解
vue3中defineProps詳解
在Vue 3中,
defineProps是一個(gè)新的API,用于在子組件中定義并接收來(lái)自父組件的props。這是Vue 3中組件數(shù)據(jù)傳遞方式的一種改進(jìn),使得props的聲明和接收更加直觀和明確。
使用方法
defineProps通常在<script setup>標(biāo)簽內(nèi)使用,通過(guò)引入并調(diào)用defineProps函數(shù)來(lái)定義組件期望接收的props。每個(gè)prop都可以指定類型、默認(rèn)值、是否必需等屬性。
下面是一個(gè)簡(jiǎn)單的示例,展示了如何在Vue 3組件中使用defineProps:
<script setup>
import { defineProps } from 'vue';
// 定義props
const props = defineProps({
title: {
type: String,
required: true,
default: 'Default Title'
},
count: {
type: Number,
default: 0
}
});
</script>
<template>
<div>
<h1>{{ title }}</h1>
<p>Count: {{ count }}</p>
</div>
</template>在這個(gè)例子中,我們定義了兩個(gè)props:title和count。title是一個(gè)必需的字符串類型prop,而count是一個(gè)可選的數(shù)字類型prop,帶有默認(rèn)值0。在模板中,我們可以直接使用這些props。
原理
defineProps的原理主要基于Vue 3的響應(yīng)式系統(tǒng)和組件系統(tǒng)。當(dāng)你使用defineProps定義props時(shí),Vue會(huì)創(chuàng)建一個(gè)響應(yīng)式的代理對(duì)象,該對(duì)象包含了所有定義的props。這個(gè)代理對(duì)象允許你在組件內(nèi)部訪問(wèn)和響應(yīng)props的變化。
在組件的渲染過(guò)程中,Vue會(huì)收集模板中對(duì)props的依賴,并在props的值發(fā)生變化時(shí)重新計(jì)算并更新相關(guān)的DOM。這是通過(guò)Vue的響應(yīng)式系統(tǒng)實(shí)現(xiàn)的,它能夠在數(shù)據(jù)變化時(shí)自動(dòng)觸發(fā)組件的重新渲染。
此外,defineProps還提供了類型檢查和驗(yàn)證的功能,確保傳入的props符合組件的期望。如果傳入的props不符合定義的類型或要求,Vue會(huì)在開(kāi)發(fā)模式下發(fā)出警告,幫助開(kāi)發(fā)者發(fā)現(xiàn)和修復(fù)問(wèn)題。
總結(jié)起來(lái),defineProps在Vue 3中提供了一種更加直觀和明確的方式來(lái)定義和接收props,使得組件之間的數(shù)據(jù)傳遞更加清晰和可維護(hù)。同時(shí),結(jié)合Vue的響應(yīng)式系統(tǒng),它還能夠確保組件在props變化時(shí)能夠自動(dòng)更新和重新渲染。
補(bǔ)充:
Vue3中的defineProps方法
1.什么是defineProps
defineProps是Vue3中的一種新的組件數(shù)據(jù)傳遞方式,可以用于在子組件中定義接收哪些父組件的props。當(dāng)父組件的props發(fā)生變化時(shí),子組件也會(huì)隨之響應(yīng)。
2.如何使用defineProps?
在子組件中可以使用defineProps聲明該組件需要接收的props,它需要傳遞一個(gè)包含props字段的對(duì)象,每個(gè)字段表示該props的默認(rèn)值和類型等信息,示例如下:
import { defineComponent, defineProps } from 'vue'
const ChildComponent =<strong> defineComponent</strong>({
props: defineProps({
message: {
type: String,
default: ''
},
count: {
type: Number,
default: 0
}
}),
template: `
<div>
<p>Message: {{ message }}</p>
<p>Count: {{ count }}</p>
</div>
`
})在父組件中,只需要通過(guò)props的方式向子組件傳遞對(duì)應(yīng)的屬性即可,如下:
<template>
<div>
<ChildComponent message="Hello, Vue3!" :count="10" />
</div>
</template>3.props類型
defineProps支持的主要類型有:
- String
- Number
- Boolean
- Object
- Array
- Function
同時(shí)也支持許多高級(jí)類型,比如,枚舉類型,對(duì)象類型,聯(lián)合類型等等。
import { defineProps } from 'vue'
const props = defineProps({
type:{
type: String,
validator: (value) => {
return ['success', 'warning', 'danger', 'info'].includes(value)
}
},
data:{
type: [Array, Object],
default: () => {
return { name: 'jack', age: 20 }
}
}
})4.props的驗(yàn)證
我們可以對(duì)props進(jìn)行驗(yàn)證,確保傳入的值符合我們期望的值。
- type:定義數(shù)據(jù)的類型
- required:是否必須
- default:默認(rèn)值
- validator:自定義驗(yàn)證
import { defineProps } from 'vue'
const props = defineProps({
count: {
type: Number,
required: true,
default: 0,
validator: (value) => {
return value >= 0 && value <= 10
}
}
})5.props的命名風(fēng)格
在Vue3中,props的命名風(fēng)格默認(rèn)采用駝峰命名風(fēng)格(CamelCase)。但,如果組件props傳入的命名是kebab-case風(fēng)格時(shí),我們可以通過(guò)配置globalProperties實(shí)現(xiàn)自動(dòng)轉(zhuǎn)換。
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.config.globalProperties.$options = {
// 將組件的 props 的 kebab-case 轉(zhuǎn)換為 camelCase
// 例如 `some-prop` 將被轉(zhuǎn)換為 `someProp`.
convertProps: true
}
app.mount('#app')6.總結(jié)
defineProps方法是Vue3的一個(gè)新特性,在組件化開(kāi)發(fā)時(shí)可以方便的定義props并進(jìn)行類型檢查,以確保數(shù)據(jù)流的正確性和可靠性,同時(shí)也可以對(duì)props進(jìn)行驗(yàn)證,確保傳入的值符合我們期望的值。同時(shí),在命名風(fēng)格上也有很大的靈活性,可以通過(guò)配置實(shí)現(xiàn)不同風(fēng)格的轉(zhuǎn)換。
參考---https://www.python100.com/html/YX519T8WHX57.html
參考---https://pythonjishu.com/kpcskqehplrtklq/
到此這篇關(guān)于vue3中defineProps詳解的文章就介紹到這了,更多相關(guān)vue3 defineProps內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue3中defineProps設(shè)置默認(rèn)值的方法實(shí)現(xiàn)
- vue3 setup中defineEmits與defineProps的使用案例詳解
- 一文詳細(xì)聊聊vue3的defineProps、defineEmits和defineExpose
- Vue3報(bào)錯(cuò)‘defineProps‘?is?not?defined的解決方法
- 關(guān)于Vue3中defineProps用法圖文詳解
- Vue3中watch監(jiān)聽(tīng)對(duì)象的屬性值(監(jiān)聽(tīng)源必須是一個(gè)getter函數(shù))
- Vue3屬性值傳遞defineProps詳解
相關(guān)文章
vue swipeCell滑動(dòng)單元格(仿微信)的實(shí)現(xiàn)示例
這篇文章主要介紹了vue swipeCell滑動(dòng)單元格(仿微信)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Vant 中的Toast設(shè)置全局的延遲時(shí)間操作
這篇文章主要介紹了Vant 中的Toast設(shè)置全局的延遲時(shí)間操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Vue的v-model的幾種修飾符.lazy,.number和.trim的用法說(shuō)明
這篇文章主要介紹了Vue的v-model的幾種修飾符.lazy,.number和.trim的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
Django+vue跨域問(wèn)題解決的詳細(xì)步驟
這篇文章主要介紹了Django+vue跨域問(wèn)題解決的詳細(xì)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
Vue中video標(biāo)簽如何實(shí)現(xiàn)不靜音自動(dòng)播放
最近在做大屏展示需要在一開(kāi)始播放引導(dǎo)視頻,產(chǎn)生自動(dòng)播放需求,下面這篇文章主要給大家介紹了關(guān)于Vue中video標(biāo)簽如何實(shí)現(xiàn)不靜音自動(dòng)播放的相關(guān)資料,需要的朋友可以參考下2023-01-01
vue實(shí)現(xiàn)彈出框內(nèi)嵌頁(yè)面展示并添加tab切換展示實(shí)時(shí)加載
彈窗效果是在Web開(kāi)發(fā)中經(jīng)常用到的一種交互效果,這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)彈出框內(nèi)嵌頁(yè)面展示并添加tab切換展示實(shí)時(shí)加載的相關(guān)資料,需要的朋友可以參考下2024-01-01
Vue事件處理中的上下文問(wèn)題:原因與解決過(guò)程
本文將探討 Vue 事件處理中常見(jiàn)的上下文問(wèn)題及其解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Vue Element前端應(yīng)用開(kāi)發(fā)之菜單資源管理
在權(quán)限管理系統(tǒng)中,菜單也屬于權(quán)限控制的一個(gè)資源,屬于角色控制的一環(huán)。不同角色用戶,登錄系統(tǒng)后,出現(xiàn)的系統(tǒng)菜單是不同的。菜單結(jié)合路由集合,實(shí)現(xiàn)可訪問(wèn)路由的過(guò)濾,也就實(shí)現(xiàn)了對(duì)應(yīng)角色菜單的展示和可訪問(wèn)路由的控制。2021-05-05

