前言
今天在翻阅 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 的设计,可以使用替换操作。