最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3中g(shù)etCurrentInstance獲取組件踩坑及解決

 更新時(shí)間:2025年06月12日 09:02:08   作者:jieyucx  
這篇文章主要介紹了vue3中g(shù)etCurrentInstance獲取組件踩坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、getCurrentInstance基本用法

我們可以通過 getCurrentInstance這個(gè)函數(shù)來返回當(dāng)前組件的實(shí)例對(duì)象,也就是當(dāng)前vue這個(gè)實(shí)例對(duì)象 

Vue2中,可以通過this來獲取當(dāng)前組件實(shí)例; 

Vue3中,在setup中無法通過this獲取組件實(shí)例,console.log(this)打印出來的值是undefined。

在Vue3中,getCurrentInstance()可以用來獲取當(dāng)前組件實(shí)例 

常見的用途包括:

  • 訪問組件實(shí)例的屬性:可以通過 getCurrentInstance().ctxgetCurrentInstance().proxy 來獲取當(dāng)前組件實(shí)例的屬性。例如,可以使用 getCurrentInstance().ctx.$props 訪問組件的 props 屬性。
  • 調(diào)用組件實(shí)例的方法:可以通過 getCurrentInstance().ctxgetCurrentInstance().proxy 來調(diào)用當(dāng)前組件實(shí)例的方法。例如,可以使用 getCurrentInstance().ctx.$emit 來觸發(fā)組件的自定義事件。
  • 在生命周期鉤子中使用:可以在組件的生命周期鉤子中使用 getCurrentInstance() 來獲取當(dāng)前組件實(shí)例,以便在鉤子函數(shù)中訪問組件實(shí)例的屬性或調(diào)用組件實(shí)例的方法。

請(qǐng)注意,getCurrentInstance 的返回值是一個(gè)組件實(shí)例對(duì)象,可以通過 .ctx 來訪問該實(shí)例的上下文對(duì)象,或者通過 .proxy 來訪問該實(shí)例的代理對(duì)象。兩者的區(qū)別在于,通過 .ctx 訪問的是真實(shí)的組件實(shí)例,而通過 .proxy 訪問的是一個(gè)代理對(duì)象,該代理對(duì)象可以在模板中直接使用。

基本使用:

import { getCurrentInstance, onMounted} from 'vue'
export default {
    setup() {
        onMounted(() => {
            const instance = getCurrentInstance()
            console.log('實(shí)例', instance)
        })
        return {}
     }

打印出來的內(nèi)容如下

我們可以根據(jù)自己的需求使用當(dāng)前實(shí)例的一些屬性和方法,比如我們獲取當(dāng)前組件中某個(gè)div的dom

代碼如下:

<template>
    <div id="cx-container" :ref="refName">
    </div>
</template>
<script>
import { getCurrentInstance, onMounted} from 'vue'
export default {
    setup() {
        const refName = 'cxContainer'
        onMounted(() => {
            const instance = getCurrentInstance().ctx
            const dom = instance.$refs[refName]
            console.log('dom', dom)
        })
        return {
       		 refName 
        }
     }
</script>

打印結(jié)果如下:

可以看到成功的獲取了dom

注意:這種獲取dom方式不推薦使用,具體見下文

二、getCurrentInstance使用注意點(diǎn)

1. getCurrentInstance 只能在 setup 或生命周期鉤子中使用

舉個(gè)例子:

<script>
import { getCurrentInstance, onMounted} from 'vue'
export default {
    setup() {
        const refName = 'cxContainer'
        const onResize = () => {
            const instance = getCurrentInstance()
        	console.log('instance', instance)		
        }
        onMounted(() => {
            window.addEventListener('resize', onResize)
        })
        return {
       		 refName 
        }
     }
</script>

以上代碼我們將const instance = getCurrentInstance()放在了onResize函數(shù)中,然后在onMounted中監(jiān)聽瀏覽器尺寸變化,尺寸變化就出發(fā)onResize函數(shù)。 

打印結(jié)果如下:

可以看到instancenull,

這時(shí)如果我們將const instance = getCurrentInstance()放到setup函數(shù)中,或者onMounted中就可以成功獲取實(shí)例

如需在 setup或生命周期鉤子外使用,先在 setup 中調(diào)用 getCurrentInstance() 獲取該實(shí)例然后再使用。

2. getCurrentInstance線上環(huán)境報(bào)錯(cuò)問題

本地代碼

<script>
    import {getCurrentInstance} from "vue";
    export default {
      setup() {
         const {ctx} = getCurrentInstance();
         console.log('ctx', ctx)
      }
    
</script>

以上代碼在本地開發(fā)調(diào)試沒有問題,在線上環(huán)境會(huì)報(bào)錯(cuò),如果通過這個(gè)ctx.$refs[xxx]獲取dom,線上就會(huì)有問題。 

解決方案

使用proxy代替ctx,proxy線上不會(huì)出現(xiàn)問題

const { proxy } = getCurrentInstance()  

三、在vue3中不推薦使用getCurrentInstance獲取組件實(shí)例

大家可以看看這位大佬的記錄vue3中g(shù)etCurrentInstance不推薦使用以及在<script setup>中獲取全局內(nèi)容(三種方式)

官方解釋:

  • 主要還是 getCurrentInstance 是一個(gè)內(nèi)部的API,并不是公開的API,使用內(nèi)部API去實(shí)現(xiàn)一些業(yè)務(wù)功能,可能會(huì)因?yàn)楹罄m(xù) Vue 的版本迭代而造成業(yè)務(wù)上的 BUG。
  • 并且 Vue3 的 Composition API 強(qiáng)調(diào)的就是業(yè)務(wù)的解耦和復(fù)用性,依賴組件實(shí)例屬性并不是一個(gè)很好的開發(fā)方式。而 vue 相關(guān)生態(tài)的使用其實(shí)就是他們內(nèi)部的事情了,他們有完善的測(cè)試用例可以跑測(cè)試,但是我們并沒有,如果后續(xù)的某一個(gè)版本Vue變更了這個(gè)API,那么如果沒有經(jīng)過完整測(cè)試就部署上去的項(xiàng)目就會(huì)出現(xiàn)大規(guī)模的BUG反饋了

如果是獲取dom大家可以通過ref獲取,比如:

<template>
     <div ref="test">hhhhhh</div>
</template>
<script>
import {ref,onMounted } from 'vue'
export default {
    setup() {
        const test = ref(null)
        
        onMounted(() => {
            console.log('test實(shí)例',test.value)
         })
        return {
        	test
		}
	}
</script>

打印結(jié)果如下:

至于其他的一些常用屬性和方法,vue3中的setup中提供了props和contexts上下文。官方setup用法

  • props

  • context

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • uniapp和vue組件之間的傳值(父子傳值,兄弟傳值,跨級(jí)傳值,vuex)

    uniapp和vue組件之間的傳值(父子傳值,兄弟傳值,跨級(jí)傳值,vuex)

    這篇文章主要介紹了uniapp和vue組件之間的傳值(父子傳值,兄弟傳值,跨級(jí)傳值,vuex),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue使用wangEditor實(shí)現(xiàn)自定義粘貼功能

    Vue使用wangEditor實(shí)現(xiàn)自定義粘貼功能

    這篇文章主要為大家詳細(xì)介紹了Vue如何使用wangEditor實(shí)現(xiàn)自定義粘貼功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • 從vue源碼看props的用法

    從vue源碼看props的用法

    平時(shí)寫vue的時(shí)候知道 props 有很多種用法,今天我們來看看vue內(nèi)部是怎么處理 props 中那么多的用法的。非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2019-01-01
  • vue 路由緩存 路由嵌套 路由守衛(wèi) 監(jiān)聽物理返回操作

    vue 路由緩存 路由嵌套 路由守衛(wèi) 監(jiān)聽物理返回操作

    這篇文章主要介紹了vue 路由緩存 路由嵌套 路由守衛(wèi) 監(jiān)聽物理返回操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue3中keep-alive和vue-router的結(jié)合使用方式

    vue3中keep-alive和vue-router的結(jié)合使用方式

    這篇文章主要介紹了vue3中keep-alive和vue-router的結(jié)合使用方式,?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue中babel.config.js配置示例詳解

    Vue中babel.config.js配置示例詳解

    Babel是一個(gè)JS編譯器,主要作用是將ECMAScript2015+ 版本的代碼,轉(zhuǎn)換為向后兼容的JS語法,以便能夠運(yùn)行在當(dāng)前和舊版本的瀏覽器或其它環(huán)境中,下面這篇文章主要給大家介紹了關(guān)于Vue中babel.config.js配置詳解的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • vue3實(shí)現(xiàn)移動(dòng)端滑動(dòng)模塊

    vue3實(shí)現(xiàn)移動(dòng)端滑動(dòng)模塊

    這篇文章主要為大家詳細(xì)介紹了vue3實(shí)現(xiàn)移動(dòng)端滑動(dòng)模塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 公共組件父子依賴調(diào)用及子校驗(yàn)父條件問題解決

    公共組件父子依賴調(diào)用及子校驗(yàn)父條件問題解決

    這篇文章主要介紹了如何解決公共組件父子組件依賴調(diào)用和子組件校驗(yàn)父組件條件的問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 解決在vue項(xiàng)目中,發(fā)版之后,背景圖片報(bào)錯(cuò),路徑不對(duì)的問題

    解決在vue項(xiàng)目中,發(fā)版之后,背景圖片報(bào)錯(cuò),路徑不對(duì)的問題

    下面小編就為大家分享一篇解決在vue項(xiàng)目中,發(fā)版之后,背景圖片報(bào)錯(cuò),路徑不對(duì)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • vue-router 4使用實(shí)例詳解

    vue-router 4使用實(shí)例詳解

    雖然 vue-router 4 大多數(shù) API 保持不變,但是在 vue3 中以插件形式存在,所以在使用時(shí)有一定的變化。接下來就學(xué)習(xí)學(xué)習(xí)它是如何使用的
    2021-11-11

最新評(píng)論

吴桥县| 武穴市| 鸡泽县| 鞍山市| 洛川县| 通城县| 监利县| 寿阳县| 名山县| 连山| 历史| 临泽县| 曲沃县| 普兰店市| 汶川县| 页游| 互助| 曲阜市| 沈阳市| 大庆市| 松桃| 陕西省| 霍城县| 七台河市| 大田县| 杨浦区| 镇江市| 抚宁县| 宝兴县| 运城市| 余干县| 临汾市| 天门市| 瑞安市| 瑞金市| 镇平县| 江孜县| 宁夏| 梅河口市| 海伦市| 博爱县|