国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue3的getCurrentInstance獲取組件實例踩坑記錄

這篇具有很好參考價值的文章主要介紹了vue3的getCurrentInstance獲取組件實例踩坑記錄。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、getCurrentInstance基本用法

我們可以通過 getCurrentInstance這個函數(shù)來返回當(dāng)前組件的實例對象,也就是當(dāng)前vue這個實例對象
Vue2中,可以通過this來獲取當(dāng)前組件實例;
Vue3中,在setup中無法通過this獲取組件實例,console.log(this)打印出來的值是undefined。

在Vue3中,getCurrentInstance()可以用來獲取當(dāng)前組件實例
常見的用途包括:

  1. 訪問組件實例的屬性:可以通過 getCurrentInstance().ctxgetCurrentInstance().proxy 來獲取當(dāng)前組件實例的屬性。例如,可以使用 getCurrentInstance().ctx.$props 訪問組件的 props 屬性。

  2. 調(diào)用組件實例的方法:可以通過 getCurrentInstance().ctxgetCurrentInstance().proxy 來調(diào)用當(dāng)前組件實例的方法。例如,可以使用 getCurrentInstance().ctx.$emit 來觸發(fā)組件的自定義事件。

  3. 在生命周期鉤子中使用:可以在組件的生命周期鉤子中使用 getCurrentInstance() 來獲取當(dāng)前組件實例,以便在鉤子函數(shù)中訪問組件實例的屬性或調(diào)用組件實例的方法。

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

基本使用:

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

打印出來的內(nèi)容如下
getcurrentinstance的作用,菜鳥的踩坑之旅,vue3從入門到精通,javascript,前端,vue.js
我們可以根據(jù)自己的需求使用當(dāng)前實例的一些屬性和方法,比如我們獲取當(dāng)前組件中某個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é)果如下:
getcurrentinstance的作用,菜鳥的踩坑之旅,vue3從入門到精通,javascript,前端,vue.js
可以看到成功的獲取了dom

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

二、getCurrentInstance使用注意點

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

舉個例子:

<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é)果如下:
getcurrentinstance的作用,菜鳥的踩坑之旅,vue3從入門到精通,javascript,前端,vue.js
可以看到instancenull,
這時如果我們將const instance = getCurrentInstance()放到setup函數(shù)中,或者onMounted中就可以成功獲取實例

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

2. getCurrentInstance線上環(huán)境報錯問題

本地代碼

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

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

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

const { proxy } = getCurrentInstance()  

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

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

官方解釋:
主要還是 getCurrentInstance 是一個內(nèi)部的API,并不是公開的API,使用內(nèi)部API去實現(xiàn)一些業(yè)務(wù)功能,可能會因為后續(xù) Vue 的版本迭代而造成業(yè)務(wù)上的 BUG。并且 Vue3 的 Composition API 強(qiáng)調(diào)的就是業(yè)務(wù)的解耦和復(fù)用性,依賴組件實例屬性并不是一個很好的開發(fā)方式。而 vue 相關(guān)生態(tài)的使用其實就是他們內(nèi)部的事情了,他們有完善的測試用例可以跑測試,但是我們并沒有,如果后續(xù)的某一個版本Vue變更了這個API,那么如果沒有經(jīng)過完整測試就部署上去的項目就會出現(xiàn)大規(guī)模的BUG反饋了
getcurrentinstance的作用,菜鳥的踩坑之旅,vue3從入門到精通,javascript,前端,vue.js
如果是獲取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實例',test.value)
         })
        return {
        	test
		}
	}
</script>

打印結(jié)果如下:
getcurrentinstance的作用,菜鳥的踩坑之旅,vue3從入門到精通,javascript,前端,vue.js
至于其他的一些常用屬性和方法,vue3中的setup中提供了props和contexts上下文。官方setup用法
props
getcurrentinstance的作用,菜鳥的踩坑之旅,vue3從入門到精通,javascript,前端,vue.js
context
getcurrentinstance的作用,菜鳥的踩坑之旅,vue3從入門到精通,javascript,前端,vue.js文章來源地址http://www.zghlxwxcb.cn/news/detail-755972.html

到了這里,關(guān)于vue3的getCurrentInstance獲取組件實例踩坑記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • vue獲取組件實例

    選項式獲取組件實例 在選項式中可以直接通過 this 來獲取組件實例,通過 this 來訪問實例對象的各種方法 組合式中獲取組件實例 在組合式用,代碼都寫在setup函數(shù)中,無法通過 this 獲取組件實例,需要通過 getCurrentInstance() 方法, getCurrentInstance() 獲取的實例對象和選項式獲取

    2024年02月07日
    瀏覽(21)
  • vue3+vite+ts項目集成科大訊飛語音識別(項目搭建過程以及踩坑記錄)

    ?? 個人主頁: 不叫貓先生 ???♂? 作者簡介:前端領(lǐng)域新星創(chuàng)作者、阿里云專家博主,專注于前端各領(lǐng)域技術(shù),共同學(xué)習(xí)共同進(jìn)步,一起加油呀! ??系列專欄:vue3從入門到精通、TypeScript從入門到實踐 ?? 資料領(lǐng)?。呵岸诉M(jìn)階資料以及文中源碼可以找我免費領(lǐng)取 ?? 前端

    2023年04月09日
    瀏覽(42)
  • Vue獲取子組件實例對象 ref 屬性

    Vue獲取子組件實例對象 ref 屬性

    在 Vue 中推薦使用 ref 屬性獲取 DOM 元素,這種方式可以提高性能。 如果將 ref 屬性使用在組件上,那么返回的就是這個組件的實例對象。 使用方式:`p ref=\\\"xxx\\\"` 或 `Banner ref=\\\"xxx\\\"` 。 獲取方式:this.$refs.xxx 1.原生 JS 獲取 DOM 元素 【不推薦】: 2. 通過 ref 屬性獲取 DOM 元素 【推薦

    2024年02月04日
    瀏覽(20)
  • uniapp小程序vue3獲取dom實例createSelectorQuery

    需求,在頁面中,有時需要獲取渲染組件的長寬信息,可以使用 select 選擇器進(jìn)行查詢,直接上代碼如下:

    2024年02月16日
    瀏覽(19)
  • vue3 父子組件傳值 記錄

    vue3 父子組件傳值 記錄

    最近這個組件之間傳值用的較多,我這該死的記性,總給忘記寫法,特此記錄下 補(bǔ)充:LeftView.vue 是父組件; Video.vue 是子組件 Video.vue 子組件 LeftView.vue 父組件 第一步 創(chuàng)建bus.js文件 第二步 分別在需要相互傳參的組件中引入bus.js文件,并相互傳參

    2024年02月11日
    瀏覽(21)
  • vue3 組件響應(yīng)式v-model 失效,實踐踩坑,一文搞懂組件響應(yīng)式原理,對初學(xué)者友好

    vue3 組件響應(yīng)式v-model 失效,實踐踩坑,一文搞懂組件響應(yīng)式原理,對初學(xué)者友好

    vue3的v-model已經(jīng)有了變化,假如你還不知道其中細(xì)節(jié),看完這篇文章你就完全明白了,我以踩坑的場景來進(jìn)行解析。起因是在我的項目中需要一個輸入框組件,這個組件用來根據(jù)輸入異步查詢系統(tǒng)內(nèi)已有人員,而且在多個地方需要用到這個輸入框,所以必須要封裝成組件,但

    2024年02月02日
    瀏覽(23)
  • 記錄--Vue3 封裝 ECharts 通用組件

    記錄--Vue3 封裝 ECharts 通用組件

    配置文件這里就不再贅述,內(nèi)容都是一樣的,主打一個隨用隨取,按需導(dǎo)入。 chartRef :當(dāng)前的 DOM 節(jié)點,即 ECharts 的容器; chartInstance :當(dāng)前 DOM 節(jié)點掛載的 ECharts 實例,可用于調(diào)用實例上的方法,注冊事件,自適應(yīng)等; draw :用于繪制 ECharts 圖表,本質(zhì)是調(diào)用實例的 setOptio

    2024年02月09日
    瀏覽(19)
  • vue3.0 父組件調(diào)用子組件方法及獲取子組件的值

    通過對比2.0的獲取及調(diào)用方式這里我們也可以借鑒2.0中的this.$refs去獲取3.0和2.0的refs獲取的方式有點大同小異,但是思路還是一樣的這里我詳細(xì)的講解一下他的調(diào)用方式及獲取方法 1.第一步需要我們在父組件中定義一個方法 當(dāng)我們點擊這個方法的時候去調(diào)用子組件的方法 代碼

    2024年02月14日
    瀏覽(25)
  • vue3中ref獲取子組件的值

    一、 script setup 通過ref獲取子組件的值或方法 父組件: 子組件: 二、setup()通過ref獲取子組件值 父組件: 子組件:

    2024年02月16日
    瀏覽(22)
  • vue3 ts獲取組件 ref元素的值

    在 Vue 3 + TypeScript 中,要獲取組件 ref 元素的值,可以通過 ref 函數(shù)創(chuàng)建一個 ref,并將其綁定到組件的 ref 屬性上。然后,可以通過訪問 ref 的 .value 屬性來獲取該組件的實例。 以下是一個示例代碼: 在上述代碼中,我們首先使用 ref 函數(shù)創(chuàng)建了一個名為 childComponentRef 的 ref,并

    2024年02月05日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包