Vue3的definePros和defineEmits使用及說(shuō)明
在 Vue 3 中,defineProps 和 defineEmits 是組合式 API 中用于定義組件的 props 和 事件 的方法,提供了一種更簡(jiǎn)潔和明確的方式來(lái)管理組件的輸入和輸出。
它們屬于 Composition API 的一部分,在 Vue 2 中通常使用 props 和 $emit 來(lái)實(shí)現(xiàn)。
1.defineProps
defineProps 用來(lái)定義組件的 props,即組件從父組件接收的屬性。它使得在 <script setup> 中使用 props 變得更加簡(jiǎn)單和類(lèi)型安全。
基本用法
<script setup>
import { defineProps } from 'vue';
// 定義 props
const props = defineProps({
msg: {
type: String,
required: true
},
count: {
type: Number,
default: 0
}
});
</script>
<template>
<div>
<p>{{ props.msg }}</p>
<p>{{ props.count }}</p>
</div>
</template>
解釋
defineProps接收一個(gè)對(duì)象,可以為每個(gè) prop 提供類(lèi)型、默認(rèn)值、是否必填等信息。- 在
<template>中直接訪問(wèn)props,無(wú)需手動(dòng)定義props。
類(lèi)型推導(dǎo)
如果使用 TypeScript,可以通過(guò)類(lèi)型推導(dǎo)讓 props 更加明確和安全:
<script setup lang="ts">
import { defineProps } from 'vue';
interface Props {
msg: string;
count: number;
}
const props = defineProps<Props>();
</script>
2.defineEmits
defineEmits 用于定義組件觸發(fā)的 自定義事件。它讓你在 <script setup> 中聲明組件發(fā)出的事件,并確保事件名稱(chēng)的類(lèi)型安全。
基本用法
<script setup>
import { defineEmits } from 'vue';
// 定義事件
const emit = defineEmits<{
(event: 'update', newValue: string): void;
}>();
// 觸發(fā)事件
const changeValue = () => {
emit('update', 'new value');
};
</script>
<template>
<button @click="changeValue">Change Value</button>
</template>
解釋
defineEmits接受一個(gè)對(duì)象或類(lèi)型,它定義了所有可能觸發(fā)的事件及其參數(shù)類(lèi)型。emit是一個(gè)函數(shù),用于觸發(fā)自定義事件,在 Vue 3 中無(wú)需手動(dòng)綁定$emit。
多事件支持
你也可以定義多個(gè)事件:
<script setup>
const emit = defineEmits<{
(event: 'update', newValue: string): void;
(event: 'delete', id: number): void;
}>();
</script>
3.組合使用
你可以在一個(gè)組件中同時(shí)使用 defineProps 和 defineEmits,以便管理組件的輸入和輸出。
<script setup>
import { defineProps, defineEmits } from 'vue';
// 定義 props
const props = defineProps({
title: String
});
// 定義事件
const emit = defineEmits<{
(event: 'updateTitle', newTitle: string): void;
}>();
// 觸發(fā)事件
const updateTitle = () => {
emit('updateTitle', 'New Title');
};
</script>
<template>
<h1>{{ props.title }}</h1>
<button @click="updateTitle">Update Title</button>
</template>
總結(jié)
defineProps:用于定義組件的輸入(即 props),提供了類(lèi)型推導(dǎo)和默認(rèn)值的支持。defineEmits:用于定義組件的輸出(即觸發(fā)的事件),提供了事件類(lèi)型安全。
這兩個(gè)方法大大簡(jiǎn)化了組件的編寫(xiě),使得代碼更加簡(jiǎn)潔、可維護(hù),并且提供了更強(qiáng)的類(lèi)型安全。如果你用 TypeScript,它們能幫助你避免很多常見(jiàn)的錯(cuò)誤。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue2導(dǎo)入使用vue-codemirror組件的教程詳解
vue-codemirror是一個(gè)基于Vue的代碼在線編輯器組件,它封裝了CodeMirror編輯器,使得在Vue項(xiàng)目中可以方便地使用CodeMirror,下面我們就來(lái)看看vue-codemirror的具體使用吧2024-02-02
讓webpack+vue-cil項(xiàng)目不再自動(dòng)打開(kāi)瀏覽器的方法
今天小編就為大家分享一篇讓webpack+vue-cil項(xiàng)目不再自動(dòng)打開(kāi)瀏覽器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Vue項(xiàng)目部署上線全過(guò)程記錄(保姆級(jí)教程)
vue項(xiàng)目開(kāi)發(fā)完畢后,我們需要將項(xiàng)目打包上線,同時(shí)我們希望可以在本地預(yù)覽生產(chǎn)環(huán)境項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目部署上線的相關(guān)資料,需要的朋友可以參考下2023-03-03
iview實(shí)現(xiàn)動(dòng)態(tài)表單和自定義驗(yàn)證時(shí)間段重疊
這篇文章主要介紹了iview實(shí)現(xiàn)動(dòng)態(tài)表單和自定義驗(yàn)證時(shí)間段重疊,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
關(guān)于Vue 自定義指令實(shí)現(xiàn)元素拖動(dòng)的詳細(xì)代碼
這篇文章主要介紹了Vue 自定義指令實(shí)現(xiàn)元素拖動(dòng),在使用自定義指令之前,先對(duì)自定義指令有一定的了解,主要從自定義指令定義范圍,鉤子函數(shù)方面入手,需要的朋友可以參考下2022-01-01
vue中循環(huán)表格數(shù)據(jù)出現(xiàn)數(shù)據(jù)聯(lián)動(dòng)現(xiàn)象(示例代碼)
在Vue中循環(huán)生成表格數(shù)據(jù)時(shí),可能會(huì)遇到數(shù)據(jù)聯(lián)動(dòng)的現(xiàn)象,即修改一個(gè)表格中的數(shù)據(jù)后,其他表格的數(shù)據(jù)也會(huì)跟著變化,這種現(xiàn)象通常是因?yàn)樗斜砀竦臄?shù)據(jù)引用了同一個(gè)對(duì)象或數(shù)組導(dǎo)致的,本文介紹vue中循環(huán)表格數(shù)據(jù)出現(xiàn)數(shù)據(jù)聯(lián)動(dòng)現(xiàn)象,感興趣的朋友一起看看吧2024-11-11
Vue.js項(xiàng)目在IE11白屏報(bào)錯(cuò)的解決方法
本文主要介紹了Vue.js項(xiàng)目在IE11白屏報(bào)錯(cuò)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08

