vue3?defineExpose的使用及應(yīng)用場景分析

子組件
//子組價
<template>
<view class="box">子組件num值:{{num}}</view>
</template>
<script setup>
import {ref} from "vue";
const num=ref(100);
const fn = ()=>{
console.log('我是方法');
}
defineExpose({
num,
fn
})
</script>父組件
//父組價
<template>
<view>
<child-defineExpose ref="child"></child-defineExpose>
</view>
</template>
<script setup>
import {onMounted, ref} from "vue";
const child=ref(null);
onMounted(()=>{
console.log(child.value.num,child.value.fn())
})
</script>簡介:
在 Vue 3 的組合式 API 中,defineExpose 是一個用于向父組件暴露內(nèi)部屬性和方法的宏。這在使用 <script setup> 語法時特別有用,因為默認(rèn)情況下,使用 <script setup> 的組件是封閉的,即父組件無法訪問子組件的內(nèi)部狀態(tài)。通過 defineExpose,你可以選擇性地暴露需要被外部訪問的屬性或方法。
關(guān)鍵點說明
僅暴露顯式聲明的屬性
- 未在
defineExpose中列出的屬性和方法對父組件不可見。 - 例如,上面的
message屬性未被暴露,父組件無法訪問。
- 未在
類型支持(TypeScript)
可以通過泛型參數(shù)為暴露的屬性和方法提供類型定義:
typescript
defineExpose<{
count: number;
increment: () => void;
}>();與非
<script setup>組件的區(qū)別- 在普通的
export default組件中,直接通過this暴露屬性和方法,無需defineExpose。
- 在普通的
應(yīng)用場景
- 父組件需要控制子組件的狀態(tài)(如獲取表單組件的值、觸發(fā)子組件的動畫)。
- 封裝可復(fù)用組件時,明確暴露可被外部調(diào)用的 API。
注意事項
- 避免過度暴露:僅暴露真正需要被外部訪問的屬性和方法,保持組件的封裝性。
- 響應(yīng)式問題:暴露的
ref在父組件中訪問時會自動解包(即直接訪問.value)。 - 測試考量:過度依賴組件間的直接引用可能導(dǎo)致測試?yán)щy,優(yōu)先考慮通過事件或狀態(tài)管理共享數(shù)據(jù)。
通過 defineExpose,你可以在保持 Vue 3 組合式 API 簡潔性的同時,靈活地實現(xiàn)組件間的交互。
到此這篇關(guān)于vue3 defineExpose的使用的文章就介紹到這了,更多相關(guān)vue3 defineExpose使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue中使用AJAX實現(xiàn)讀取來自XML文件的信息
這篇文章主要為大家詳細(xì)介紹了vue中如何使用AJAX實現(xiàn)讀取來自XML文件的信息,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的小伙伴可以參考下2023-12-12
Vue?圖片監(jiān)聽鼠標(biāo)滑輪滾動實現(xiàn)圖片縮小放大功能(實現(xiàn)思路)
其實想要實現(xiàn)功能很簡單,就是在一張圖片上監(jiān)聽鼠標(biāo)滑輪滾動的事件,然后根據(jù)上滾還是下滾實現(xiàn)圖片的縮放,這篇文章主要介紹了Vue?實現(xiàn)圖片監(jiān)聽鼠標(biāo)滑輪滾動實現(xiàn)圖片縮小放大功能,需要的朋友可以參考下2023-03-03
vue 實現(xiàn)數(shù)字滾動增加效果的實例代碼
最近做了個項目需要做數(shù)字滾動增加的效果,剛開始接到這個項目還真是懵了,后來發(fā)現(xiàn)實現(xiàn)代碼很簡單的,下面小編給大家?guī)砹藇ue 實現(xiàn)數(shù)字滾動增加效果的實例代碼,需要的朋友參考下吧2018-07-07
element上傳組件循環(huán)引用及簡單時間倒計時的實現(xiàn)
這篇文章主要介紹了element上傳組件循環(huán)引用及簡單時間倒計時的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10

