vue視圖不更新情況詳解

我們在處理vue項(xiàng)目的時候牺蹄,可能會遇到數(shù)據(jù)變化,視圖并沒有實(shí)時渲染的情況~

當(dāng)你把一個普通的 JavaScript 對象傳給 Vue 實(shí)例的 data 選項(xiàng)薄翅,Vue 將遍歷此對象所有的屬性沙兰,并使用 Object.defineProperty 把這些屬性全部轉(zhuǎn)為 getter/setter。這些 getter/setter 對用戶來說是不可見的翘魄,但是在內(nèi)部它們讓 Vue 追蹤依賴鼎天,在屬性被訪問和修改時通知變化。

每個組件實(shí)例都有相應(yīng)的 watcher 實(shí)例對象暑竟,它會在組件渲染的過程中把屬性記錄為依賴斋射,之后當(dāng)依賴項(xiàng)的 setter 被調(diào)用時,會通知 watcher 重新計算但荤,從而致使它關(guān)聯(lián)的組件得以更新绩鸣。


一、數(shù)組數(shù)據(jù)變動纱兑,使用某些方法操作數(shù)組呀闻,變動數(shù)據(jù)時,有些方法無法被vue監(jiān)測潜慎,

push()捡多,pop()蓖康,shift(),unshift()垒手,splice()蒜焊,sort(),reverse()可被vue檢測到 科贬,filter(), concat(), slice() 泳梆。這些不會改變原始數(shù)組,但總是返回一個新數(shù)組榜掌。當(dāng)使用非變異方法時优妙,可以用新數(shù)組替換舊數(shù)組。

vue不能檢測以下變動的數(shù)組:

① 當(dāng)你利用索引直接設(shè)置一個項(xiàng)時憎账,vm.items[indexOfItem] = newValue

② 當(dāng)你修改數(shù)組的長度時套硼,例如: vm.items.length = newLength


二、對象屬性的添加或刪除胞皱。由于 Vue 會在初始化實(shí)例時對屬性執(zhí)行?getter/setter?轉(zhuǎn)化過程邪意,所以屬性必須在?data?對象上存在才能讓 Vue 轉(zhuǎn)換它,這樣才能讓它是響應(yīng)的反砌。

解決辦法:使用?Vue.set(object, key, value)?方法將響應(yīng)屬性添加到嵌套的對象上

Vue.set(vm.someObject, 'b', 2)? 或者? this.$set(this.someObject,'b',2) (這也是全局 Vue.set 方法的別名)


三雾鬼、異步更新隊(duì)列。在最新的項(xiàng)目中遇到了這種情況宴树,數(shù)據(jù)第一次獲取到了呆贿,也渲染了,但是第二次之后數(shù)據(jù)只有在再一次渲染頁面的時候更新森渐,并不能實(shí)時更新做入。

網(wǎng)上查了資料才知道,Vue?異步執(zhí)行 DOM 更新同衣。只要觀察到數(shù)據(jù)變化竟块,Vue 將開啟一個隊(duì)列,并緩沖在同一事件循環(huán)中發(fā)生的所有數(shù)據(jù)改變耐齐。如果同一個 watcher 被多次觸發(fā)浪秘,只會被推入到隊(duì)列中一次。

解決辦法:可在數(shù)據(jù)變化之后立即使用?Vue.nextTick(callback)?埠况。這樣回調(diào)函數(shù)在 DOM 更新完成后就會調(diào)用耸携。例如:

因?yàn)?$nextTick()?返回一個 Promise 對象,所以可以使用新的?ES2016 async/await語法完成相同的事情:

四辕翰、vue多層循環(huán)夺衍,動態(tài)改變數(shù)據(jù)后渲染的很慢或者不渲染。

可在動態(tài)改變數(shù)據(jù)的方法喜命,第一行加上??

this.$forceUpdate();

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沟沙,一起剝皮案震驚了整個濱河市河劝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矛紫,老刑警劉巖赎瞎,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異颊咬,居然都是意外死亡务甥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門喳篇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敞临,“玉大人,你說我怎么就攤上這事杭隙。” “怎么了因妙?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵痰憎,是天一觀的道長。 經(jīng)常有香客問我攀涵,道長铣耘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任以故,我火速辦了婚禮蜗细,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怒详。我一直安慰自己炉媒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布昆烁。 她就那樣靜靜地躺著吊骤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪静尼。 梳的紋絲不亂的頭發(fā)上白粉,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音鼠渺,去河邊找鬼鸭巴。 笑死,一個胖子當(dāng)著我的面吹牛拦盹,可吹牛的內(nèi)容都是我干的鹃祖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼普舆,長吁一口氣:“原來是場噩夢啊……” “哼惯豆!你這毒婦竟也來了池磁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤楷兽,失蹤者是張志新(化名)和其女友劉穎地熄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芯杀,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡端考,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了揭厚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片却特。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖筛圆,靈堂內(nèi)的尸體忽然破棺而出裂明,到底是詐尸還是另有隱情,我是刑警寧澤太援,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布闽晦,位于F島的核電站,受9級特大地震影響提岔,放射性物質(zhì)發(fā)生泄漏仙蛉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一碱蒙、第九天 我趴在偏房一處隱蔽的房頂上張望荠瘪。 院中可真熱鬧,春花似錦赛惩、人聲如沸哀墓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麸祷。三九已至,卻和暖如春褒搔,著一層夾襖步出監(jiān)牢的瞬間阶牍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工星瘾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留走孽,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓琳状,卻偏偏與公主長得像磕瓷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 這方面的文章很多困食,但是我感覺很多寫的比較抽象边翁,本文會通過舉例更詳細(xì)的解釋。(此文面向的Vue新手們硕盹,如果你是個大牛...
    Ivy_2016閱讀 15,389評論 8 64
  • 我們可能經(jīng)常會在處理vue項(xiàng)目的時候符匾,遇到數(shù)據(jù)變化,但是視圖并沒有實(shí)時渲染的情況 vue視圖為什么不渲染頁面的原因...
    澤玲_d7fb閱讀 30,323評論 5 26
  • 摘要: 搞懂Vue響應(yīng)式原理瘩例! 作者:浪里行舟 原文:深入淺出Vue響應(yīng)式原理 Fundebug經(jīng)授權(quán)轉(zhuǎn)載啊胶,版權(quán)歸...
    Fundebug閱讀 5,491評論 0 9
  • 前言 Vue.js 的核心包括一套“響應(yīng)式系統(tǒng)”焰坪。 “響應(yīng)式”,是指當(dāng)數(shù)據(jù)改變后聘惦,Vue 會通知到使用該數(shù)據(jù)的代碼...
    world_7735閱讀 950評論 0 2
  • Vue 的組件對象支持了計算屬性 computed 和偵聽屬性 watch 2 個選項(xiàng)某饰。我們接下來從源碼實(shí)現(xiàn)的角度...
    oWSQo閱讀 462評論 0 0