vue3中使用props和emits并指定其類型與默認(rèn)值
前言
本文主要描述 vue3 中 defineProps 與 defineEmits 分別在 JS 環(huán)境和 TS 環(huán)境中的使用方法。
defineProps 的使用
defineProps
在使用的時(shí)候無需引入,默認(rèn)是全局方法。
- 在 js 開發(fā)的 vue3 項(xiàng)目中使用
const props = defineProps({ attr1: { type: String, // S 必須大寫 default: "", }, attr2: Boolean, attr3: { type: Number, required: true, }, });
js 環(huán)境中使用與 vue2 的使用方法類似,只是選項(xiàng)式 API 換成了組合式 API。定義 props 類型與默認(rèn)值都與 vue2 類型,vue3 中使用的是defineProps
API,在此不多介紹。
- 在 ts 開發(fā)的 vue3 項(xiàng)目中使用
interface DeatilInf { aaa: string; bbb: number; } const props = withDefaults( // 參數(shù)一:定義props類型:? 代表非必傳字段, :號(hào)后面緊跟的是數(shù)據(jù)類型或自定義接口, | 或多種類型 defineProps<{ name: string; age?: number; detail?: DeatilInf | any; }>(), // 參數(shù)二:指定非必傳字段的默認(rèn)值 { age: 18, detail: {}, } );
使用 typeScript 開發(fā) vue3 項(xiàng)目定義 props 主要使用的 API 有兩個(gè): defineProps
定義接收的 props 、withDefaults
定義接收的類型。
當(dāng)然,你也可以使用上述 js 環(huán)境使用的方法定義 props,但這樣做就失去了使用 TS 的意義了。
defineEmits 的使用
與 vue2 不同:vue3 在觸發(fā)事件之前需要定義事件。同樣在 vue3 中 defineEmits 也是全局 API
- js 中使用
const emits = defineEmits(["change", "input"]); emits("chage", "data"); emits("input", { data: 123 });
- TS 中使用
enum EventName { CHANGE = "change", INPUT = "input", } const emits = defineEmits<{ (event: EventName.CHANGE, data: string[]): void; (event: EventName.INPUT, data: string): void; }>(); emits(EventName.CHANGE, ["data"]); emits(EventName.INPUT, "123");
上面的代碼中使用了枚舉 enum
避免"魔法字符串"的出現(xiàn)。值得一提,ts 中也可以使用 js 的方式使用,那么就沒有發(fā)揮出‘T’的作用。
尤其在大型項(xiàng)目里面觸發(fā)數(shù)據(jù)的類型可能會(huì)出現(xiàn)意想不到的 bug,然后定位 bug 可能得花上好幾個(gè)小時(shí)。也可能會(huì)出現(xiàn)觸發(fā)事件的事件名字符串寫錯(cuò)(俗稱魔法字符串)導(dǎo)致達(dá)不到預(yù)期效果。
總結(jié)
經(jīng)過上述代碼示例,可能覺得 ts 的寫法似乎更加麻煩了,不如 js 來的快。但是,我個(gè)人認(rèn)為使用 ts 開發(fā)不僅僅是提示友好,而且能有效避開很多的坑??芍^:"未雨綢繆"勝過“亡羊補(bǔ)牢”的好。
到此這篇關(guān)于vue3中使用props和emits并指定其類型與默認(rèn)值的文章就介紹到這了,更多相關(guān)vue3使用props和emits內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用Webstorm和Chrome來調(diào)試Vue項(xiàng)目
這篇文章主要介紹了如何使用Webstorm和Chrome來調(diào)試Vue項(xiàng)目,對(duì)Vue感興趣的同學(xué),一定要看一下2021-05-05Vue中傳遞自定義參數(shù)到后端、后端獲取數(shù)據(jù)并使用Map接收參數(shù)
有些傳遞的參數(shù)是直接拼接到URL地址欄中的、但是為了統(tǒng)一管理、不能將傳遞的參數(shù)直接拼接到地址欄中,接下來通過本文給大家介紹Vue中傳遞自定義參數(shù)到后端、后端獲取數(shù)據(jù)并使用Map接收參數(shù),感興趣的朋友一起看看吧2022-10-10element中Select選擇器實(shí)現(xiàn)自定義顯示內(nèi)容
在我們很多前端業(yè)務(wù)開發(fā)中,往往為了方便,都需要自定義一些用戶組件,本文主要介紹了element中Select選擇器實(shí)現(xiàn)自定義顯示內(nèi)容,感興趣的可以了解一下2023-12-12Vue3中的極致防抖/節(jié)流詳解(附常見方式防抖/節(jié)流)
在JavaScript中函數(shù)的防抖和節(jié)流不是什么新鮮話題,這篇文章主要給大家介紹了關(guān)于Vue3中極致防抖/節(jié)流的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02vue在IIS服務(wù)器部署后路由無法跳轉(zhuǎn)
在IIS服務(wù)器上部署Vue項(xiàng)目時(shí),可能會(huì)遇到路由無法正常跳轉(zhuǎn)的問題,解決方法有兩種,下面就來具體介紹一下解決方法,感興趣的可以了解一下2024-10-10