vue3父組件異步props傳值子組件接收不到值問題解決辦法
項目場景:
當(dāng)我們使用vue3進(jìn)行開發(fā)在創(chuàng)建組件的時候,子組件經(jīng)常需要調(diào)用父組件的數(shù)據(jù),那么這是就需要vue3的props進(jìn)行對父組件與子組件通信來達(dá)到傳值的效果
問題描述
在使用props進(jìn)行父子組件通信時,子組件無法成功渲染數(shù)據(jù),導(dǎo)致拿到數(shù)據(jù)為空問題
原因分析:
提示:這里填寫問題的分析:
在使用props進(jìn)行父子組件通信時,如果父組件的數(shù)據(jù)是同步數(shù)據(jù)的話,那么這時子組件拿到的數(shù)據(jù)就可以直接的渲染在視圖上面這就是我們所說的同步渲染;但如果父組件的數(shù)據(jù)是通過異步獲取的,那么這時子組件拿到的數(shù)據(jù)屬于異步渲染數(shù)據(jù),也就是說當(dāng)子組件在拿數(shù)據(jù)的過程中還沒完全拿到數(shù)據(jù)就已經(jīng)開始渲染了這就導(dǎo)致了子組件拿到數(shù)據(jù)后就已經(jīng)渲染完成數(shù)據(jù)了,那么也就無法成功渲染異步數(shù)據(jù)
解決方案:
提示:這里填寫該問題的具體解決方案:
其實子組件是已經(jīng)成功拿到數(shù)據(jù)了,只是渲染提前了導(dǎo)致無法成功渲染出來;那么我們這時可以使用vue3的watch來進(jìn)行監(jiān)聽props所拿到的數(shù)據(jù),之后在進(jìn)行渲染
<script lang="ts"> export default { props: { contentText: { type: String, default: '' } }, setup(props) { // 監(jiān)聽輸出內(nèi)容變化 watch(() => props.contentText, (newVal: any) => { valueHtml.value = newVal; }) } } </script>
補(bǔ)充:
如果遇到watch:失效的問題以下操作可以解決
watch:{ data:{ //監(jiān)聽的數(shù)據(jù) handler(val, oldName){ console.log(val) }, immediate:true, }, },
設(shè)置一個immediate為true就可以了
總結(jié)
到此這篇關(guān)于vue3父組件異步props傳值子組件接收不到值問題解決辦法的文章就介紹到這了,更多相關(guān)vue3父組件異步props傳值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue 實現(xiàn) tomato timer(蕃茄鐘)實例講解
下面小編就為大家?guī)硪黄獀ue 實現(xiàn) tomato timer(蕃茄鐘)實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07基于Vue實現(xiàn)tab欄切換內(nèi)容不斷實時刷新數(shù)據(jù)功能
在項目開發(fā)中遇到這樣需求,就是有幾個tab欄,每個tab欄對應(yīng)的ajax請求不一樣,內(nèi)容區(qū)域一樣,內(nèi)容為實時刷新數(shù)據(jù),實現(xiàn)方法其實很簡單的,下面小編給大家?guī)砹嘶赩ue實現(xiàn)tab欄切換內(nèi)容不斷實時刷新數(shù)據(jù)功能,需要的朋友參考下吧2017-04-04