Vue中的computed与watch的区别

499 阅读1分钟

computed

computed(计算属性),顾名思义是通过计算得到的新属性,它根据所依赖的属性动态计算出新的属性结果,并且会将结果缓存下来,其中的原理就是ES6中的getter方法计算得到新属性。

代码示例:

new vue({
    data:{
        n:1,
        m:2,
    },
    template:`
        <div>{{q}}</div>
    `,
    computed:{
        q(){
            return this.m+this.n
        }
    }
})

watch

watch(侦听器),用于监听data,侦听器有value,oldValue两个参数,当监听的某个data发生变化时,就执行一个回调,如果要深层次的监听data,就用deep:true,如果页面一渲染就开始监听,就用immediate:true

代码示例:

new vue({
    data:{
        q:{
          n:1,
          m:2,
        },
    },
    template:`
        <div>
            {{q.n}}
            <button @click="q.n += 1">n+1</button>
        </div>
    `,
    watch:{
        q:{
          handler(){
            console.log('data变了')
          },
          immediate:true,
          deep:true,
        },
    },
})

总结

能用computed解决的需求不用watch,如果数据依赖于其他数据用computed,如果要监听数据变化用watch。