Vue的watch和 computed的区别

101 阅读1分钟

一、watch


watch 是一个监听器,当一个值变化,就会触发,获取到当前值和变化前的值,他可以接受异步操作,没有缓存功能。

基础用法

watch:{
        //普通类型写法
        one(newData, oldData){
                newData 新值
                oldData 变化前的值
                ...写需要的逻辑
            }
        }
        //对象写法
        'data.one'(newData, oldData){
                newData 新值
                oldData 变化前的值
                ...写需要的逻辑
            }
        }

立即监听(会马上触发一次,但是旧值为undefined)

watch:{
        one:{
            handler:function(newData, oldData) {
            console.log(newData, oldData);
        },
        immediate:true
            },
        }

深度监听(当一个对象你需要监听其中一个值变化的时候就可以使用,可以返回更新前后的整个对象)

watch:{
        one:{
            handler:function(newData, oldData) {
            console.log(newData, oldData);
        },
        deep:true
            },
        }

二、computed


computed 当data的值发生变化,就会触发,他具有缓存功能,但是函数内不接受异步操作,一般用于一些运算或者根据多少返回什么类型的场景。

<body>
    <div id="root">

        {{ isComputed }}

        <button @click="showInfo"></button>

    </div>

</body>

<script type="text/javascript">

    Vue.config.productionTip=false
    const vm = new Vue({
        el:'#root',
        data:{
            name:22
        },

        methods:{
            showInfo(){
                this.name = 111
            }
        },

        computed:{
            isComputed(){
                return this.name * 10 + 1
            }
        }
    })

三、watch和computed的区别


  1. watch :没有缓存,监听的值每次发生改变都会执行,可以在函数里面执行异步操作,不需要return返回,通常用于根据值改变后调用接口的场景。
  2. computed:具有缓存,值不发生变化不会触发,不支持异步操作,需要return返回,通常用于复杂的计算场景
未完待续。。。