Vue 數組更新檢測

Vue 數組更新檢測

變異方法

Vue包含一組觀察數組的變異方法,所以它們也將會觸發(fā)視圖更新。這些方法如下:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reserve()

替換數組

變異方法會改變被這些方法調用的原始數組。相比之下,也有非變異方法,例如: filter(), concat()slice() 。這些方法不會改變原始數組,但總是會返回一個新數組。當使用非變異方法時,可以用新數組替換舊數組:

example.items = example.items.filter(function (item) {
    return item.message.match(/Foo/)
})

可以認為這將導致Vue丟棄現有DOM并重新渲染整個列表。然而事實并非如此。Vue為了使得DOM元素得到最大范圍的重用而實現了一些智能的、啟發(fā)式的方法,所以用一個含有相同元素的數組去替換原來的數組是非常高效的操作。

注意事項

由于 Javascript 的限制,Vue 不能檢測到以下變動的數組:

1.利用索引直接設置一個項,例如: vm.items[index] = newVal

2.修改數組的長度時,例如: vm.items.length = newLength

例如:

var vm = new Vue({
    data: {
        items: ['a', 'b', 'c']
    }
})
vm.items[1] = 'x'   // 不是響應性的
vm.items.length = 2 // 不是響應性的

為了解決第一類問題,一下兩種方法都可以實現和 vm.items[index] = newVal 相同的效果,同時也將觸發(fā)狀態(tài)更新:

// Vue.set
Vue.set(vm.items, index, newVal)
// Array.prototype.splice
vm.items.splice(index, 1, newVal)

也可以使用 vm.$set 實例方法,該方法是全局方法 Vue.set 的一個別名:

vm.$set(vm.items, index, newVal)

為了解決第二類問題,可以使用 splice

vm.items.splice(newLength)
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • #變異方法 作用 : 改變這些方法調用的原始數組 VUE包含一組觀察數組的變異方法,他們也將觸發(fā)視圖的更新 數組方...
    竹溪穆褕閱讀 371評論 0 0
  • 變異方法 Vue 包含一組觀察數組的變異方法,所以它們也將會觸發(fā)視圖更新 替換數組 非變異 (non-mutati...
    飛魚_JS閱讀 1,147評論 0 1
  • 今天在做項目的時候,需要向vuex的中的一個數組添加屬性。使用的方法為: array[index] = newVa...
    果果不正常閱讀 197評論 0 0
  • 主要還是自己看的,所有內容來自官方文檔。 介紹 Vue.js 是什么 Vue (讀音 /vju?/,類似于 vie...
    Leonzai閱讀 3,537評論 0 25
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內容,還有我對于 Vue 1.0 印象不深的內容。關于...
    云之外閱讀 5,175評論 0 29

友情鏈接更多精彩內容