vue3子組件數(shù)據(jù)無(wú)法更新問(wèn)題
vue3子組件數(shù)據(jù)無(wú)法更新
在寫vue3代碼時(shí),遇到了父組件傳值給子組件,但是子組件無(wú)法及時(shí)刷新數(shù)據(jù),父組件數(shù)據(jù)是異步獲取的。
使用了很多方法,froceUpdate(),nextTick之類的方法都試過(guò)了沒(méi)有生效。
所以需要在父組件對(duì)子組件進(jìn)行刷新。
解決思路
利用vue diff算法的特點(diǎn),更新key,強(qiáng)制使子組件刷新
代碼:
//dom //給需要刷新的子組件加上一個(gè)自定義的key <v-number :num="memoryNum" :fontSize="28" class="number" :key="keyNum"></v-number> //ts //所有數(shù)據(jù)加載完畢之后,更改這個(gè)key即可 let keyNum = ref(0); onMounted(async () => { ?await init(); ?keyNum.value++; });
vue3子組件數(shù)據(jù)無(wú)法更新
問(wèn)題描述
子組件接收到父組件傳遞的prop數(shù)據(jù)后,在created 中進(jìn)行一番預(yù)處理,再賦值給模板,而當(dāng)在父組件中改變prop數(shù)據(jù),子組件的視圖未發(fā)生改變。
原因
子組件并沒(méi)有重新加載,所以不會(huì)再次執(zhí)行created或者mounted,子組件也就未處理改變的prop數(shù)據(jù),視圖也就不會(huì)更新。
解決辦法
子組件上加上唯一的key,傳入的props不同時(shí),key值也不同,這樣當(dāng)切換prop數(shù)據(jù)的時(shí)候,由于key不同,vue會(huì)認(rèn)為是兩個(gè)不同的組件,就會(huì)重新執(zhí)行組件的created或者mounted中的操作。
<Child :data="data" :key="data.id"></Child>
在子組件使用 watch 監(jiān)聽(tīng)(可能需要深度監(jiān)聽(tīng))props傳過(guò)來(lái)的值,如果發(fā)現(xiàn)改變,再次執(zhí)行created或者mounted中的操作。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
簡(jiǎn)單實(shí)現(xiàn)vue中的依賴收集與響應(yīng)的方法
這篇文章主要介紹了簡(jiǎn)單實(shí)現(xiàn)vue中的依賴收集與響應(yīng)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02VUE+Element實(shí)現(xiàn)增刪改查的示例源碼
這篇文章主要介紹了VUE+Element實(shí)現(xiàn)增刪改查的示例源碼,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下2020-11-11簡(jiǎn)單談?wù)刅ue3中的ref和reactive
vue3中實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)的方法是就是使用ref和reactive,所謂響應(yīng)式就是界面和數(shù)據(jù)同步,能實(shí)現(xiàn)實(shí)時(shí)更新,下面這篇文章主要給大家介紹了關(guān)于Vue3中ref和reactive的相關(guān)資料,需要的朋友可以參考下2023-04-04Vue 固定頭 固定列 點(diǎn)擊表頭可排序的表格組件
這篇文章主要介紹了Vue 固定頭 固定列 點(diǎn)擊表頭可排序的表格組件的相關(guān)資料,需要的朋友可以參考下2016-11-11Message組件實(shí)現(xiàn)發(fā)財(cái)U(kuò)I?示例詳解
這篇文章主要為大家介紹了Message組件實(shí)現(xiàn)發(fā)財(cái)U(kuò)I的手寫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08