vue中computed计算属性、watch侦听器、methods方法的区别以及用法

简介: vue中computed计算属性、watch侦听器、methods方法的区别以及用法

一、定义

1、computed是计算属性,依赖其他属性值,并且computed的值有缓存。只有computed依赖的属性值发生变化,computed的值才会重新计算。

运用场景:一个数据属性在它所依赖的属性发生变化时,也要发生变化。对于任何复杂逻辑,你都应当使用计算属性。

2、watch侦听器没有缓存性,起到观察的作用,即监听数据的变化。watch为一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。

运用场景:侦听一个数的变化,当该数据变化,来处理其他与之相关数据的变化,即一个数据影响别的多个数据。


3、methods选项中的定义的函数称为方法,在Vue实例化的过程中,methods对象中的方法将被混入到Vue实例中,成为Vue实例的方法。可以直接通过Vue实例访问这些方法。需要主动调用methods中的函数才能执行。


二、computed计算属性

1、使用方法和data中的数据一样,但是类似一个执行方法

2、在调用时候不加()

3、必须有return返回

4、如果函数所依赖的属性没有发生变化,从缓存中读取


示例
<template>
  <div class="about">
    <p>Original message: "{{ message }}"</p>
    <p>Computed reversed message: "{{ reversedMessage }}"</p>
  </div>
</template>
<script>
export default {
  name: 'About',
  data() {
    return {
      message: 'Hello'
    }
  },
  computed: {
    // 计算属性的 getter
    reversedMessage: function () {
      return this.message.split('').reverse().join('')
    }
  },
}
</script>

在以上代码中我们定义了一个计算属性:reverseMessage,其值为一个函数并返回我们需要的结果。之后在模板中就可以像使用message一样使用reverseMessage。

<template>
  <div class="about">
    <p>Original message: "{{ message }}"</p>
    <p>Computed reversed message: "{{ reversedMessage() }}"</p>
  </div>
</template>
<script>
export default {
  name: 'About',
  data() {
    return {
      message: 'Hello'
    }
  },
  methods:{
    reversedMessage () {
      return this.message.split('').reverse().join('')
    }
  }
}
</script>

我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。


计算购物车商品总价示例
computed:{
    Total(){
        let price = 0;
        for (let i = 0;i<this.tableData.length;i++) {
            price += this.tableData[i].taxUnitPrice * this.tableData[i].invNum
        }
        this.detailedSend.total = price
        return price;
    },
},


三、watch监听

1、watch的函数名称必须和data中的数据名一致

2、watch中的函数有两个参数,前者是newVal,后者是oldVal

3、watch中的函数是不需要调用的

4、watch只会监听数据的值是否发生改变,而不会去监听数据的地址是否发生改变,

例如:object.a变了,object没变。

要深度监听需要配合deep:true属性使用。

5、immediate:true 它表示在第一次渲染的时候是否要执行这个函数


搜索框示例
watch: {
    keyword () {
        const result = []
        this.jsonData.forEach(val => {
            if (val.name.indexOf(this.keyword) > -1) {
                result.push(val.name)
            }
        });
        this.cityList = result
    }
},


四、区别

1、功能:computed是计算属性;watch是监听一个值的变化执行对应的回调

2、是否调用缓存:computed函数所依赖的属性不变的时候会调用缓存;watch每次监听的值发生变化时候都会调用回调

3、是否调用return:computed必须有;watch可以没有

4、使用场景:computed当一个属性受多个属性影响的时候;例如购物车商品结算;watch当一条数据影响多条数据的时候,例如搜索框

5、是否支持异步:computed函数不能有异步;watch可以

目录
相关文章
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
1472 0
|
存储 数据采集 供应链
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
10月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
677 137
|
11月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
803 2
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
602 0
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
852 1
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
886 1
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
813 17