搜索
首页web前端Vue.jsVue中如何使用computed监听响应式数据并更新DOM

Vue是一款流行的JavaScript框架,它结合了响应式数据绑定和组件化构建,简化了前端开发。其中computed是Vue响应式数据的一种使用方式,可以根据依赖的数据动态生成计算属性,实现数据的转换和展现,并自动缓存中间结果以提高性能。本文将介绍如何使用computed监听响应式数据并更新DOM。

一、computed的基本用法

在Vue中,我们可以使用computed属性来定义一个计算属性。其语法格式为:

computed: {
  propertyName: function () { /*计算并返回属性的值*/ }
}

其中propertyName是计算属性的名称,function()是具体的计算方法。我们可以在该方法中访问Vue实例的data属性,并计算出属性的值,例如:

<template>
  <div>
    <p>商品单价:{{price}}元</p>
    <p>购买数量:{{amount}}件</p>
    <p>总价:{{totalPrice}}元</p> 
  </div>
</template>

<script>
export default {
  data () {
    return {
      price: 2, // 商品单价
      amount: 3 // 购买数量
    }
  },
  computed: {
    totalPrice: function () {
      return this.price * this.amount // 总价
    }
  }
}
</script>

在该例子中,我们定义了一个计算属性totalPrice,它依赖了price和amount两个响应式数据,每当它们的值发生变化时,totalPrice的值也会动态更新。我们在模板中使用{{totalPrice}}来展示这个计算属性的值,并不需要自己手动更新DOM,Vue会自动执行计算属性的方法,并更新对应的DOM元素。

二、computed的依赖缓存

computed属性的另一个重要特性是依赖缓存。这意味着只要计算属性依赖的响应式数据没有发生改变,那么计算属性也不会重新计算,而是直接返回上一次的结果。这样可以避免不必要的计算,提高程序的运行效率。

例如,我们在上面的例子中多次读取计算属性totalPrice,例如:

<template>
  <div>
    <p>商品单价:{{price}}元</p>
    <p>购买数量:{{amount}}件</p>
    <p>总价1:{{totalPrice}}元</p>
    <p>总价2:{{totalPrice}}元</p>
  </div>
</template>

可以看到,我们读取了两次totalPrice。但是只有当price或amount发生变化时,totalPrice才会重新计算,这样就有效地避免了重复的计算。

三、computed的getter和setter

除了上面介绍的基本用法,computed还支持getter和setter的定义方式。这意味着我们可以在计算属性的赋值操作中执行额外的操作,例如数据校验、数据格式化等。

computed的getter和setter语法格式如下:

computed: {
  propertyName: {
    get: function () {},
    set: function () {}
  }
}

其中propertyName是计算属性的名称,在get函数中返回计算属性的值,而在set函数中对计算属性的值进行赋值操作。

例如,我们在上面的例子中使用setter来修改product单价,但是限制单价不能小于0。

<template>
  <div>
    <p>商品单价:{{price}}元</p>
    <p>购买数量:{{amount}}件</p>
    <p>总价:{{totalPrice}}元</p>
  </div>
</template>

<script>
export default {
  data () {
    return {
      _price: 2, // 商品原始价格(不对外暴露)
      amount: 3 // 购买数量
    }
  },
  computed: {
    price: {
      get: function () {
        return this._price // 返回商品价格
      },
      set: function (value) {
        if (value < 0) {
          console.log("商品单价不能小于0")
          return
        }
        this._price = value // 修改商品价格
      }
    },
    totalPrice: function () {
      return this.price * this.amount // 总价
    }
  }
}
</script>

在该例子中,我们使用了一个下划线前缀的_price响应式数据来保存真正的商品单价,而将price定义为一个具有getter和setter操作的计算属性。在setter中我们判断了用户输入的price是否为负数,如果是则输出错误信息,否则将其赋值给_price。

总结

computed是Vue中非常方便的一种响应式数据使用方式,它能够根据依赖的响应式数据动态生成计算属性,并自动缓存中间结果以提高性能。我们可以在计算属性的getter和setter中执行各种数据操作,例如数据格式化、数据校验等。这样能够简化代码,提高开发效率。

以上是Vue中如何使用computed监听响应式数据并更新DOM的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Vue常见面试题汇总(附答案解析)Vue常见面试题汇总(附答案解析)Apr 08, 2021 pm 07:54 PM

本篇文章给大家分享一些Vue面试题(附答案解析)。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

5 款适合国内使用的 Vue 移动端 UI 组件库5 款适合国内使用的 Vue 移动端 UI 组件库May 05, 2022 pm 09:11 PM

本篇文章给大家分享5 款适合国内使用的 Vue 移动端 UI 组件库,希望对大家有所帮助!

vue中props可以传递函数吗vue中props可以传递函数吗Jun 16, 2022 am 10:39 AM

vue中props可以传递函数;vue中可以将字符串、数组、数字和对象作为props传递,props主要用于组件的传值,目的为了接收外面传过来的数据,语法为“export default {methods: {myFunction() {// ...}}};”。

手把手带你利用vue3.x绘制流程图手把手带你利用vue3.x绘制流程图Jun 08, 2022 am 11:57 AM

利用vue3.x怎么绘制流程图?下面本篇文章给大家分享基于 vue3.x 的流程图绘制方法,希望对大家有所帮助!

聊聊vue指令中的修饰符,常用事件修饰符总结聊聊vue指令中的修饰符,常用事件修饰符总结May 09, 2022 am 11:07 AM

本篇文章带大家聊聊vue指令中的修饰符,对比一下vue中的指令修饰符和dom事件中的event对象,介绍一下常用的事件修饰符,希望对大家有所帮助!

如何覆盖组件库样式?React和Vue项目的解决方法浅析如何覆盖组件库样式?React和Vue项目的解决方法浅析May 16, 2022 am 11:15 AM

如何覆盖组件库样式?下面本篇文章给大家介绍一下React和Vue项目中优雅地覆盖组件库样式的方法,希望对大家有所帮助!

通过9个Vue3 组件库,看看聊前端的流行趋势!通过9个Vue3 组件库,看看聊前端的流行趋势!May 07, 2022 am 11:31 AM

本篇文章给大家分享9个开源的 Vue3 组件库,通过它们聊聊发现的前端的流行趋势,希望对大家有所帮助!

react与vue的虚拟dom有什么区别react与vue的虚拟dom有什么区别Apr 22, 2022 am 11:11 AM

react与vue的虚拟dom没有区别;react和vue的虚拟dom都是用js对象来模拟真实DOM,用虚拟DOM的diff来最小化更新真实DOM,可以减小不必要的性能损耗,按颗粒度分为不同的类型比较同层级dom节点,进行增、删、移的操作。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)