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

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 14:16:03
字體:
來源:轉載
供稿:網友

在跨越主路由視圖時,由于Vuex的狀態值一直存儲在內存中,所以在組件視圖重新載入時,可能會出現組件無法檢測到狀態值的變化,從而導致業務邏輯出現錯誤。

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

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

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

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

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

經過上面的處理,只要發生taskId的賦值現象,那么一定會觸發Vuex的狀態變化,所以每次組件載入時或taskId的值發生變化時,render方法就一定會被執行。

結論

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

以上這篇基于Vuex無法觀察到值變化的解決方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 娄底市| 四子王旗| 攀枝花市| 夏津县| 西丰县| 靖宇县| 株洲县| 汝州市| 封开县| 美姑县| 台东县| 怀集县| 琼中| 拉萨市| 平远县| 萝北县| 普安县| 肥乡县| 平阳县| 建瓯市| 比如县| 三都| 永登县| 南涧| 黄平县| 上栗县| 乌海市| 汉中市| 兴山县| 定州市| 安溪县| 萨嘎县| 建平县| 象山县| 广汉市| 六枝特区| 衢州市| 合水县| 鹤峰县| 大庆市| 江口县|