Vue中computed和watch的区别

computed

这是一个计算属性,用于创建一个新的变量,其值是自定义的通过某些计算逻辑得到的结果,并在模板中引用,不需要加括号

示例:

<div id="example">

    <p>Original message: "{{ message }}"</p>

    <p>Computed reversed message: "{{ reversedMessage }}"</p>

</div>

var vm = new Vue({

    el: '#example',

    data: { message: 'Hello' },

    computed: {

        reversedMessage: function () {

            return this.message.split('').reverse().join('')

        }

    }

});

如上示例中,模板中的{{ reversedMessage }}是计算属性computed中定义的reversedMessage方法的返回值

计算属性是基于它们的响应式依赖进行缓存的,只在相关响应式依赖发生改变时它们才会重新求值


watch

这是一个监听器,用于监听指定data的变化,执行自定义的操作

示例:

var vm = new Vue({

    el: '#demo',

    data: {

        firstName: 'Foo',

        lastName: 'Bar',

        fullName: 'Foo Bar'

    },

    watch: {

        firstName: function (val) {

            this.fullName = val + ' ' + this.lastName

        },

        lastName: function (val) {

            this.fullName = this.firstName + ' ' + val

        }

    }

})

watch还有两个比较常用的参数:

(1)immediate:表示是否要在第一次渲染的时候执行这个函数

(2)deep:用于判断data中的对象元素的某个key的值是否发生变化,因为当元素中某个key的值变化时,Vue可能会认为这个对象没有变化,因为Vue判断对象是否发生变化的依据是对象的内存地址


computed 和watch的区别

1. computed 支持缓存,只有依赖数据发生改变,才会重新进行计算;watch 不支持缓存,数据变,直接会触发相应的操作

2. computed 不支持异步,当computed内有异步操作时无效,无法监听数据的变化;watch 支持异步


两者如何使用

1. 如果一个数据依赖于其他数据的简易计算处理的,那么应该使用computed

2. 如果需要在某个数据变化时做一些事情,使用watch来观察这个数据变化

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容