0%

Vue.js 之“变异”和“替换”的概念

前言

今天在翻阅 Vue 的文档查看 watch 相关解释时,在查看到 vm.$watch 时看到了“变异”一词。官网内容摘抄如下:

注意:在变异 (不是替换) 对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变异之前值的副本。

当时内心充满了困惑,当真是不小的朋友也有很多问号?明明是我认识的词语,却又那么陌生。为了理解“变异”一词的意思,写下这篇文章。

什么是变异?

变异方法,顾名思义,会改变调用了这些方法的原始数组。

数组的变异方法包括 push(), pop(), shift(), unshift(), splice(), sort(), reverse()。这些变异方法也会触发视图更新。

什么是替换?

非变异方法也就是不会改变原数组,而总是返回一个新数组。例如:filter(), concat(), slice()等。
当使用非变异方法时,可以直接替换数组。

1
this.userList = this.userList.filter(item => item.age > 18)

基于 Vue 的设计,这并不会导致整个列表被重新渲染,因而可以使用替换。

结语

看到这里也就明白了,变异的情形就是变异方法会改变原数组。替换的情形就是非变异方法不改变原数组,返回新数组,加上 Vue 的设计,可以使用替换操作。