解決Vue響應(yīng)式數(shù)據(jù)已獲取而視圖不更新的問題
首先
我們要深刻理解 Vue響應(yīng)式的原理 通過get 和 set進(jìn)行獲取與設(shè)置 同時通知觀察者進(jìn)行新舊虛擬dom樹 diff算法就地更新 重新渲染組件
特別注意
Vue官方文檔的注意事項(xiàng)
由于javaScript的限制 Vue不能檢測數(shù)組和對象的變化 因此你就要思考 為什么我的響應(yīng)式有問題
我們看一個實(shí)戰(zhàn)bug 同事托我解決的一個問題
watch 偵聽tree回調(diào)函數(shù) 過濾出來的數(shù)組 從而去觸發(fā)filterNode
但是watch正常 但是偏偏不觸發(fā)filterNode 一切正常 數(shù)據(jù)全有 變化也有 refdom節(jié)點(diǎn)也能打印出來 就是不觸發(fā)~ 唯一的可能性 樹是空的 所以導(dǎo)致不觸發(fā)回調(diào)過濾
但是有時候刷新頁面能觸發(fā) 有時候不能觸發(fā) 我懷疑是 Vue的熱更新和瀏覽器的緩存導(dǎo)致
因此我們可以想象為什么 樹是空的 我明明有數(shù)據(jù) 為什么dom上的節(jié)點(diǎn)為空
只有一種可能 數(shù)據(jù)更新 視圖沒有獲取到 那就證明Vue響應(yīng)式出錯了
所以我發(fā)現(xiàn)我同事在數(shù)據(jù)處理上有問題 他利用下標(biāo)去處理數(shù)組進(jìn)行循環(huán)賦值 因此讓Vue沒有劫持到
所以我換了種寫法 用的push 因?yàn)閜ush可以做到Vue對數(shù)據(jù)更新的檢測
對于這種問題 Vue官網(wǎng)提供的 Set方法也可以解決 不過這屬于亡羊補(bǔ)牢 根本問題并沒有解決。
對于解決bug
困難不在于如何去解決 而是難在去尋找問題 排查問題所在 排查問題的能力是一位開發(fā)者至關(guān)重要的手段。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
前端使用el-table自帶排序功能\后端排序方法實(shí)例
在Vue.js中使用Element UI庫時可以通過el-table組件來展示表格數(shù)據(jù),并支持列排序,下面這篇文章主要給大家介紹了關(guān)于前端使用el-table自帶排序功能\后端排序的相關(guān)資料,需要的朋友可以參考下2024-08-08關(guān)于Vue.js一些問題和思考學(xué)習(xí)筆記(1)
這篇文章主要為大家分享了關(guān)于Vue.js一些問題和思考的學(xué)習(xí)筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12vue 實(shí)現(xiàn)移動端鍵盤搜索事件監(jiān)聽
今天小編就為大家分享一篇vue 實(shí)現(xiàn)移動端鍵盤搜索事件監(jiān)聽,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11VUE在for循環(huán)里面根據(jù)內(nèi)容值動態(tài)的加入class值的方法
這篇文章主要介紹了VUE在for循環(huán)里面根據(jù)內(nèi)容值動態(tài)的加入class值的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08vxe-list?vue?如何實(shí)現(xiàn)下拉框的虛擬列表
這篇文章主要介紹了vxe-list?vue?如何實(shí)現(xiàn)下拉框的虛擬列表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06vuex提交state&&實(shí)時監(jiān)聽state數(shù)據(jù)的改變方法
今天小編就為大家分享一篇vuex提交state&&實(shí)時監(jiān)聽state數(shù)據(jù)的改變方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09