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