vue3 provide和inject底層組件的值不是響應(yīng)式的處理詳解
前景提示
在學(xué)習(xí)provide和inject是發(fā)現(xiàn)一個問題就是頂層組件使用功provide傳遞的值在基層組件中使用inject接收后不是響應(yīng)式的,如下代碼所示
//頂層組件代碼
const count = ref(100);
provide('count-key',count);
const setCount = ()=>{
count.value = 99;
}
<template>
<div>{{count}}</div>//99
</template>
//底層組件
const count = inject('count-key');
const setCount = inject('set-count);
onMounted(()=>{
setCount();
})
/*子組件的onMounted執(zhí)行完成之后父組件的onMounted函數(shù)才執(zhí)行完成,所以在子組件中顯示的100,但是父組件中顯示時已經(jīng)修改了count的值,所以父組件中顯示的99,子組件中顯示的100*/
<template>
<div>{{count}}</div>//100
</template>解決方法
//頂層組件代碼
const count = ref(100);
provide('count-key',count);
const setCount = ()=>{
count.value = 99;
return {
countNum:count.value
}
}
provide('set-count',setcount)
<template>
<div>{{count}}</div>//99
</template>
//底層組件
const count = inject('count-key');
const setCount = inject('set-count');
const countNum = setCount().countNum
<template>
<div>{{count}}--{{countNum}}</div>//100--99
</template>
在子組件中使用的count的值還是和上面一段代碼的解釋一樣,但是父組件的count和子組件的countNum的值都是重新包裝之后才顯示所以是響應(yīng)式改變的這里感謝 Jyann博主的文章給予的幫助,在這里貼上鏈接,里面的內(nèi)容更加的全面,大家有相關(guān)問題可以查閱http://www.dbjr.com.cn/javascript/2959180fb.htm
以上就是vue3 provide和inject底層組件的值不是響應(yīng)式的處理詳解的詳細(xì)內(nèi)容,更多關(guān)于vue3 provide inject組件值的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue實現(xiàn)高德坐標(biāo)轉(zhuǎn)GPS坐標(biāo)功能的示例詳解
生活中常用的幾種坐標(biāo)有:WGS-84、GCJ-02與BD-09。本文將利用Vue實現(xiàn)高德坐標(biāo)轉(zhuǎn)GPS坐標(biāo)功能,即實現(xiàn)GCJ-02坐標(biāo)轉(zhuǎn)換成WGS-84坐標(biāo),需要的可以參考一下2022-04-04
Vue echarts模擬后端數(shù)據(jù)流程詳解
在平常的項目中,echarts圖表我們也是使用的非常多的,通常我們從后端拿到數(shù)據(jù),需要在圖表上動態(tài)的進(jìn)行呈現(xiàn),接下來我們就模擬從后端獲取數(shù)據(jù)然后進(jìn)行呈現(xiàn)的方法2022-09-09
crypto-js對稱加密解密的使用方式詳解(vue與java端)
這篇文章主要介紹了如何在Vue前端和Java后端使用crypto-js庫進(jìn)行AES加密和解密,前端通過創(chuàng)建AES.js文件來實現(xiàn)加密解密功能,并在Vue文件或JavaScript中使用,后端則可以直接使用Java代碼進(jìn)行AES加密和解密操作,需要的朋友可以參考下2025-01-01

