国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

基于Vuex無法觀察到值變化的解決方法

2024-05-06 15:21:15
字體:
供稿:網(wǎng)友

在跨越主路由視圖時,由于Vuex的狀態(tài)值一直存儲在內(nèi)存中,所以在組件視圖重新載入時,可能會出現(xiàn)組件無法檢測到狀態(tài)值的變化,從而導(dǎo)致業(yè)務(wù)邏輯出現(xiàn)錯誤。

假定通用頭部組件有一個全局任務(wù)狀態(tài)值,其他的組件都要根據(jù)此任務(wù)值進行更新,更可能出現(xiàn)的情況是,任務(wù)狀態(tài)值是異步加載完成的,于是需要如此編寫業(yè)務(wù)邏輯:

computed : { task () {  return this.$store.state.task } },watch : { task : {   deep: true,   handler (val) {    // 由于是異步載入,所以只能在狀態(tài)值的變化時執(zhí)行渲染操作    // 絕不可在mounted中執(zhí)行render方法    this.render(val)   } } }

但是,由于上面的原因,第一次載入視圖時,因為Vuex的狀態(tài)值還沒有存儲在內(nèi)存中,所以渲染正常。發(fā)生了視圖切換后,雖然也重新載入了任務(wù)狀態(tài)值,但由于task并沒有發(fā)生變化,所以render方法不會被調(diào)用,于是組件無法完成渲染過程。

解決的辦法很簡單,強行觸發(fā)task值發(fā)生改變,方法是定義一個時間戳,如果覺得在時間戳的粒度仍然太粗,還可以組合使用隨機數(shù),如下:

watch: { taskId : {   handler (val) {    // 從v-model獲取到的新值    let taskId = this.taskId    // 提交新值變化    this.$store.commit(TASK_ID,     {     id : taskId,     // 添加時間戳     time : Date.now().valueOf(),     // 添加隨機數(shù)     random : Math.random()    })   } }}

經(jīng)過上面的處理,只要發(fā)生taskId的賦值現(xiàn)象,那么一定會觸發(fā)Vuex的狀態(tài)變化,所以每次組件載入時或taskId的值發(fā)生變化時,render方法就一定會被執(zhí)行。

結(jié)論

為了滿足Vuex的值傳遞要求,尤其是需要強行刷新Vuex的緩存時,添加時間戳與隨機數(shù)不失為一種好的解決方案。

以上這篇基于Vuex無法觀察到值變化的解決方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持錯新站長站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 轮台县| 西安市| 枣阳市| 平遥县| 防城港市| 刚察县| 芮城县| 金华市| 柏乡县| 拜城县| 连江县| 海伦市| 巍山| 兴城市| 左贡县| 岱山县| 灵璧县| 揭西县| 乐清市| 旌德县| 尖扎县| 蓬安县| 武邑县| 梅州市| 盐源县| 循化| 韶山市| 本溪| 德昌县| 抚松县| 阿拉善左旗| 阜南县| 宁德市| 台南县| 桑日县| 安吉县| 绥江县| 乌拉特后旗| 镇安县| 南丰县| 乐陵市|