欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3父組件訪問子組件方法/屬性的五種方案

 更新時間:2025年03月03日 09:43:54   作者:ttod_qzstudio  
在Vue3的組件化開發(fā)中,父子組件間的通信是核心功能之一,本文將詳細介紹五種父組件訪問子組件屬性/方法的實現(xiàn)方案,包含最新的<script setup>語法糖實踐,需要的朋友可以參考下

一、ref + defineExpose(推薦方案)

通過組合式API實現(xiàn)精準(zhǔn)訪問,這是Vue3官方推薦的核心方式:

<!-- 子組件 Child.vue  -->
<script setup>
import { ref } from 'vue'
 
const childData = ref('子組件數(shù)據(jù)')
const childMethod = () => console.log(' 方法被觸發(fā)')
 
// 必須暴露才能被父組件訪問
defineExpose({
  childData,
  childMethod
})
</script>
 
<!-- 父組件 Parent.vue  -->
<template>
  <Child ref="childRef" />
</template>
 
<script setup>
import { ref, onMounted } from 'vue'
const childRef = ref(null)
 
onMounted(() => {
  console.log(childRef.value.childData)  // 輸出:子組件數(shù)據(jù)
  childRef.value.childMethod()           // 觸發(fā)子組件方法
})
</script>

關(guān)鍵點說明:

  1. 子組件必須通過defineExpose顯式暴露屬性/方法
  2. 父組件通過ref.value 訪問時需注意生命周期時序
  3. 支持TS類型推導(dǎo)(需配合TypeScript使用)

二、getCurrentInstance(備用方案)

適用于需要訪問組件上下文的高級場景:

// 子組件
defineExpose({ customMethod: () => {} })
 
// 父組件
import { getCurrentInstance } from 'vue'
 
const instance = getCurrentInstance()
const childComponent = instance.refs.childRef 
childComponent.customMethod() 

注意事項:

  1. 屬于底層API,建議優(yōu)先使用ref方案
  2. 需要嚴格保證組件渲染順序
  3. 在SSR環(huán)境中可能出現(xiàn)問題

三、事件驅(qū)動模式(props + emit)

符合單向數(shù)據(jù)流原則的通信方式:

<!-- 子組件 -->
<script setup>
defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])
 
const updateData = (val) => {
  emit('update:modelValue', val)
}
</script>
 
<!-- 父組件 -->
<Child :modelValue="parentData" @update:modelValue="handleUpdate"/>

適用場景:

  • 需要維持數(shù)據(jù)單向流動
  • 表單組件等需要雙向綁定的情況

四、依賴注入模式(provide/inject)

解決深層嵌套組件訪問問題:

// 祖先組件
provide('sharedData', ref('可響應(yīng)數(shù)據(jù)'))
 
// 后代組件
const data = inject('sharedData')

優(yōu)勢:

  • 跨多層組件直接訪問
  • 配合響應(yīng)式API實現(xiàn)狀態(tài)共享

五、狀態(tài)管理方案(Pinia/Vuex)

全局狀態(tài)管理場景下的訪問方式:

// store/userStore.js 
export const useUserStore = defineStore('user', {
  state: () => ({ userInfo: null })
})
 
// 任意組件
const store = useUserStore()
store.userInfo  = '全局數(shù)據(jù)'

適用場景:

  • 需要跨多組件共享狀態(tài)
  • 復(fù)雜應(yīng)用的狀態(tài)管理

注意事項與最佳實踐

  1. 單向數(shù)據(jù)流原則:優(yōu)先考慮props/emit方式傳遞數(shù)據(jù)
  2. 封裝性保護:子組件應(yīng)明確暴露的最小API集合
  3. 生命周期時序:確保在onMounted之后訪問ref
  4. TypeScript支持:使用interface定義暴露類型

方案對比表

方法適用層級響應(yīng)式維護成本適用場景
ref + defineExpose父子??精準(zhǔn)方法調(diào)用
provide/inject跨級??深層組件共享
事件驅(qū)動父子??數(shù)據(jù)變更通知
狀態(tài)管理全局??復(fù)雜應(yīng)用狀態(tài)共享

到此這篇關(guān)于Vue3父組件訪問子組件方法/屬性的五種方案的文章就介紹到這了,更多相關(guān)Vue3父組件訪問子組件方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue系列之requireJs中引入vue-router的方法

    vue系列之requireJs中引入vue-router的方法

    這篇文章主要介紹了vue系列之requireJs中引入vue-router的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • axios向后臺傳遞數(shù)組作為參數(shù)的方法

    axios向后臺傳遞數(shù)組作為參數(shù)的方法

    今天小編就為大家分享一篇axios向后臺傳遞數(shù)組作為參數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Vue腳手架學(xué)習(xí)之項目創(chuàng)建方式

    Vue腳手架學(xué)習(xí)之項目創(chuàng)建方式

    這篇文章主要給大家介紹了關(guān)于Vue腳手架學(xué)習(xí)之項目創(chuàng)建方式的相關(guān)資料,文中通過介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • vue前端實現(xiàn)login頁登陸驗證碼代碼示例

    vue前端實現(xiàn)login頁登陸驗證碼代碼示例

    現(xiàn)在我們管理后臺有個需求,就是登錄頁面需要獲取驗證碼,用戶可以輸入驗證碼后進行登錄,這篇文章主要給大家介紹了關(guān)于vue前端實現(xiàn)login頁登陸驗證碼的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • vue如何解決循環(huán)引用組件報錯的問題

    vue如何解決循環(huán)引用組件報錯的問題

    這篇文章主要介紹了vue如何解決循環(huán)引用組件報錯的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Vue之Computed依賴收集與更新原理分析

    Vue之Computed依賴收集與更新原理分析

    這篇文章主要介紹了Vue之Computed依賴收集與更新原理分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue項目之webpack打包靜態(tài)資源路徑不準(zhǔn)確的問題

    vue項目之webpack打包靜態(tài)資源路徑不準(zhǔn)確的問題

    這篇文章主要介紹了vue項目之webpack打包靜態(tài)資源路徑不準(zhǔn)確的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue中g(shù)et方法\post方法如何傳遞數(shù)組參數(shù)詳解

    vue中g(shù)et方法\post方法如何傳遞數(shù)組參數(shù)詳解

    在前后端交互的時候,有時候需要通過get或者delete傳遞一個數(shù)組給后臺,下面下面這篇文章主要給大家介紹了關(guān)于vue中g(shù)et方法\post方法如何傳遞數(shù)組參數(shù),文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • TypeScript基本類型 typeof 和keyof案例詳解

    TypeScript基本類型 typeof 和keyof案例詳解

    這篇文章主要介紹了TypeScript基本類型 typeof 和keyof案例詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • vue修改數(shù)據(jù)視圖更新原理學(xué)習(xí)

    vue修改數(shù)據(jù)視圖更新原理學(xué)習(xí)

    這篇文章主要為大家介紹了vue修改數(shù)據(jù)視圖更新原理學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11

最新評論