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> 語法時特別有用,因?yàn)槟J(rèn)情況下,使用 <script setup> 的組件是封閉的,即父組件無法訪問子組件的內(nèi)部狀態(tài)。通過 defineExpose,你可以選擇性地暴露需要被外部訪問的屬性或方法。
關(guān)鍵點(diǎ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。
注意事項(xiàng)
- 避免過度暴露:僅暴露真正需要被外部訪問的屬性和方法,保持組件的封裝性。
- 響應(yīng)式問題:暴露的
ref在父組件中訪問時會自動解包(即直接訪問.value)。 - 測試考量:過度依賴組件間的直接引用可能導(dǎo)致測試?yán)щy,優(yōu)先考慮通過事件或狀態(tài)管理共享數(shù)據(jù)。
通過 defineExpose,你可以在保持 Vue 3 組合式 API 簡潔性的同時,靈活地實(shí)現(xiàn)組件間的交互。
到此這篇關(guān)于vue3 defineExpose的使用的文章就介紹到這了,更多相關(guān)vue3 defineExpose使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue.extend實(shí)現(xiàn)掛載到實(shí)例上的方法
這篇文章主要介紹了Vue.extend實(shí)現(xiàn)掛載到實(shí)例上的方法,結(jié)合實(shí)例形式分析了Vue.extend實(shí)現(xiàn)掛載到實(shí)例上的具體操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-05-05
使用Vue-scroller頁面input框不能觸發(fā)滑動的問題及解決方法
這篇文章主要介紹了使用Vue-scroller頁面input框不能觸發(fā)滑動的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
vue 使用 canvas 實(shí)現(xiàn)手寫電子簽名
這篇文章主要介紹了vue 使用 canvas 實(shí)現(xiàn)手寫電子簽名功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
Vue3實(shí)現(xiàn)動態(tài)高度的虛擬滾動列表的示例代碼
虛擬滾動列表是一種優(yōu)化長列表渲染性能的技術(shù),通過只渲染可視區(qū)域內(nèi)的列表項(xiàng),減少DOM的渲染數(shù)量,本文就來介紹一下Vue3實(shí)現(xiàn)動態(tài)高度的虛擬滾動列表的示例代碼,具有一定的參考價值,感興趣的可以了解一下2025-01-01
vue中使用vue-cli接入融云實(shí)現(xiàn)即時通信
這篇文章主要介紹了vue中使用vue-cli接入融云實(shí)現(xiàn)即時通信的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04

