vue3?使用provide?inject父子組件傳值失敗且子組件不響應(yīng)
1.普通傳值
傳遞普通值,直接父級
provide(/* 注入名 */ 'message', /* 值 */ 'hello!')
子級:
const message = inject('message')
2.通過axios異步獲取數(shù)據(jù)后傳值
問題:
在項目中一般是通過接口請求到數(shù)據(jù)后再傳遞給子級,provide和inject如果直接再調(diào)用接口的方法內(nèi)傳值會報警告,而且值也傳遞不過去。就是說provide()必須在setup根節(jié)點處才能使用,在方法里面用是不行的

但是,直接在setup根節(jié)點處傳遞,由于數(shù)據(jù)是異步獲取的,直接傳遞時數(shù)據(jù)是還沒有值的,傳遞過去的都是聲明時的初始值。
解決:
使用方法包裝需要傳遞的值,然后provide()傳遞過去的是方法,inject()時通過方法調(diào)用獲取值
父級:
const provideData = () =>{
? return {
? ? columns: columns.value,
? ? data: resourceData.value,
? ? pageNum: pageNum.value,
? ? total: total.value,
? ? pageSize: pageSize.value
? }
}
provide('provideData',provideData);
子級獲取:
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è)計的,注入后子組件的值不具有響應(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);子組件中再通過方法進(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())以對象形式傳遞值
父組件:
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父子組件傳值傳不過去且傳遞后子組件不具備響應(yīng)性的詳細(xì)內(nèi)容,更多關(guān)于vue3 使用provide inject父子組件傳值傳不過去且傳遞后子組件不具備響應(yīng)性的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue上傳組件vue Simple Uploader的用法示例
本篇文章主要介紹了Vue上傳組件vue Simple Uploader的用法示例,非常具有實用價值,需要的朋友可以參考下2017-08-08
Element-plus表格數(shù)據(jù)延遲加載的實現(xiàn)方案
本文介紹了在前端展示大量數(shù)據(jù)時遇到的加載卡頓問題,并提供了一種解決方案:延遲加載,具體做法是設(shè)置加載數(shù)量,對于數(shù)據(jù)量較大的情況,進(jìn)行分批加載數(shù)據(jù),通過類選擇器找到表格滾動條并進(jìn)行監(jiān)聽綁定事件,感興趣的朋友跟隨小編一起看看吧2024-11-11

