vue3?使用provide?inject父子組件傳值失敗且子組件不響應(yīng)
1.普通傳值
傳遞普通值,直接父級(jí)
provide(/* 注入名 */ 'message', /* 值 */ 'hello!')
子級(jí):
const message = inject('message')
2.通過(guò)axios異步獲取數(shù)據(jù)后傳值
問(wèn)題:
在項(xiàng)目中一般是通過(guò)接口請(qǐng)求到數(shù)據(jù)后再傳遞給子級(jí),provide和inject如果直接再調(diào)用接口的方法內(nèi)傳值會(huì)報(bào)警告,而且值也傳遞不過(guò)去。就是說(shuō)provide()必須在setup根節(jié)點(diǎn)處才能使用,在方法里面用是不行的
但是,直接在setup根節(jié)點(diǎn)處傳遞,由于數(shù)據(jù)是異步獲取的,直接傳遞時(shí)數(shù)據(jù)是還沒(méi)有值的,傳遞過(guò)去的都是聲明時(shí)的初始值。
解決:
使用方法包裝需要傳遞的值,然后provide()傳遞過(guò)去的是方法,inject()時(shí)通過(guò)方法調(diào)用獲取值
父級(jí):
const provideData = () =>{ ? return { ? ? columns: columns.value, ? ? data: resourceData.value, ? ? pageNum: pageNum.value, ? ? total: total.value, ? ? pageSize: pageSize.value ? } } provide('provideData',provideData); 子級(jí)獲取: const provideData = inject('provideData'); const columns = provideData().columns; const data = provideData().data; const total = provideData().total; const pageNum = provideData().pageNum; const pageSize = provideData().pageSize;
3.父組件值更改后,子組件的值不具備響應(yīng)性
vue本身就是這樣設(shè)計(jì)的,注入后子組件的值不具有響應(yīng)性,但是我們可以進(jìn)行處理
以方法形式傳遞值
const provideData = () =>{ return { columns: ()=>columns.value, data: ()=>resourceData.value, pageNum: ()=>pageNum.value, total: ()=>total.value, pageSize: ()=>pageSize.value } } provide('provideData',provideData);
子組件中再通過(guò)方法進(jìn)行調(diào)用:
const provideData = inject('provideData'); const columns = computed(() => provideData().columns()) const data = computed(() => provideData().data()) const total = computed(() => provideData().total()) const pageNum = computed(() => provideData().pageNum()) const pageSize = computed(() => provideData().pageSize())
以對(duì)象形式傳遞值
父組件:
const provideData = () =>{ return { data:{ columns: columns.value, data: resourceData.value, pageNum: pageNum.value, total: total.value, pageSize: pageSize.value } } } provide('provideData',provideData);
子組件:
const provideData = inject('provideData'); const columns = computed(() => provideData().data.columns) const data = computed(() => provideData().data.data) const total = computed(() => provideData().data.total) const pageNum = computed(() => provideData().data.pageNum) const pageSize = computed(() => provideData().data.pageSize)
以上就是vue3 使用provide inject父子組件傳值傳不過(guò)去且傳遞后子組件不具備響應(yīng)性的詳細(xì)內(nèi)容,更多關(guān)于vue3 使用provide inject父子組件傳值傳不過(guò)去且傳遞后子組件不具備響應(yīng)性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue上傳組件vue Simple Uploader的用法示例
本篇文章主要介紹了Vue上傳組件vue Simple Uploader的用法示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-08-08Element-plus表格數(shù)據(jù)延遲加載的實(shí)現(xiàn)方案
本文介紹了在前端展示大量數(shù)據(jù)時(shí)遇到的加載卡頓問(wèn)題,并提供了一種解決方案:延遲加載,具體做法是設(shè)置加載數(shù)量,對(duì)于數(shù)據(jù)量較大的情況,進(jìn)行分批加載數(shù)據(jù),通過(guò)類選擇器找到表格滾動(dòng)條并進(jìn)行監(jiān)聽綁定事件,感興趣的朋友跟隨小編一起看看吧2024-11-11vue中實(shí)現(xiàn)展示與隱藏側(cè)邊欄功能
這篇文章主要介紹了vue中實(shí)現(xiàn)展示與隱藏側(cè)邊欄功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08vuejs響應(yīng)用戶事件(如點(diǎn)擊事件)
本篇文章主要介紹了vuejs響應(yīng)用戶事件(如點(diǎn)擊),通過(guò)vuejs響應(yīng)用戶事件的技巧,具有一定的參考價(jià)值,有興趣的小伙伴們可以參考一下。2017-03-03通過(guò)npm或yarn自動(dòng)生成vue組件的方法示例
這篇文章主要介紹了通過(guò)npm或yarn自動(dòng)生成vue組件的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02vue儲(chǔ)存storage時(shí)含有布爾值的解決方案
這篇文章主要介紹了vue儲(chǔ)存storage時(shí)含有布爾值的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06解決vue的component標(biāo)簽渲染問(wèn)題
這篇文章主要介紹了解決vue的component標(biāo)簽渲染問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03