Vue中computed和watch的特性总结

233 阅读2分钟

计算属性computed

  1. 计算属性依赖于data或者props传递过来的其他数据项,呈现一对一或者多对一的对应关系。所以其擅长处理的场景为一个数据受多个数据影响

  2. 支持缓存,只有当依赖的数据发生变化才会重新计算,否则从之前的缓存中获取值,提升性能。

  3. 不支持异步,有异步操作时无效,无法监听数据的变化。

  4. 如果computed属性值是函数,默认执行get方法,数据变化时,执行set方法

观察者/监听属性watch

  1. 监听的数据必须来源于data或者props传递过来的数据项,当监听到数据发生变化时,触发其他操作。所以其擅长的场景为一个数据影响多个数据,当需要在一个数据变化时进行异步或者其他开销较大的操作时,watch这个方式是最有效的

  2. 支持异步操作。

  3. 不支持缓存,数据变化直接进行相应的操作。

  4. 监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值。

  5. 监听可配置两个函数。

  • immedeiate:组件加载立即触发回调函数,默认为false.
  • deep:深度监听,默认为false。针对复杂类型数据,比如为了监听对象内部属性值的变化。当监听某个对象并开放deep:true时(即深度监听),会将对象属性全部遍历并加上监听事件。为了优化性能,可以直接监听对象内的某个属性obj.key。

6.注意事项:

  • watch 在特殊情况下是无法监听到数据的变化: 通过下标来更改数组中的数据; 通过 length 来改变数组的长度;对象属性的新增和删除。解决方案:可以通过Vue实例方法set、delete来更新数据以及官网指出的一些数组操作方法push、pop、splice、sort、reverse、shift、unshift等等

  • watch默认情况下无法监听到对象属性的变化,如果有这方面的需求,需要开放深度监听,配置deep:true以及handler函数(handler这部分在ts中不需要配置)。

  • watch中的函数不需要被调用,当监听的数据发生变化,会自动触发。