vue3子組件數(shù)據(jù)無法更新問題
vue3子組件數(shù)據(jù)無法更新
在寫vue3代碼時,遇到了父組件傳值給子組件,但是子組件無法及時刷新數(shù)據(jù),父組件數(shù)據(jù)是異步獲取的。
使用了很多方法,froceUpdate(),nextTick之類的方法都試過了沒有生效。
所以需要在父組件對子組件進行刷新。
解決思路
利用vue diff算法的特點,更新key,強制使子組件刷新
代碼:
//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 中進行一番預處理,再賦值給模板,而當在父組件中改變prop數(shù)據(jù),子組件的視圖未發(fā)生改變。
原因
子組件并沒有重新加載,所以不會再次執(zhí)行created或者mounted,子組件也就未處理改變的prop數(shù)據(jù),視圖也就不會更新。
解決辦法
子組件上加上唯一的key,傳入的props不同時,key值也不同,這樣當切換prop數(shù)據(jù)的時候,由于key不同,vue會認為是兩個不同的組件,就會重新執(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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Message組件實現(xiàn)發(fā)財UI?示例詳解
這篇文章主要為大家介紹了Message組件實現(xiàn)發(fā)財UI的手寫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08