什么情况使用计算属性

2021-11-19  本文已影响0人  家乡_a6ce

1、分离逻辑

需求如下:

// 给定文本 text,去除其首尾空白,然后将其反转显示。
// 例:
const text = '花费'
// ==> 花费

不使用计算属性,代码长这样:

<template>
  <div id="example">
    {{ text.split('').reverse().join('') }}
  </div>
</template>

<script>
export default {
  data: () => ({
    text: '花费'
  })
}
</script>

使用计算属性后,代码长这样:

<template>
  <div id="example">
    {{ normalizedText }}
  </div>
</template>

<script>
export default {
  data: () => ({
    text: ''花费"
  }),
  computed: {
    normalizedText() {
      return this.text.split('').reverse().join('')
    }
  }
}
</script>

显而易见,使用计算属性后,相关逻辑放在了 computed 选项内,模板更干净了

Vue 中我们不需要在 template 里面直接 {{ text.split('').reverse().join('') }}实现该功能,因为在模版中放入太多声明式的逻辑会让模板本身过重,尤其当在页面中使用大量复杂的逻辑表达式处理数据时,会对页面的可维护性造成很大的影响,而 computed 的设计初衷也正是用于解决此类问题。

在一个计算属性里可以完成各种复杂的逻辑,包括运算、函数调用等,只要最终返回一个结果就可以。

2、缓存值

接上例,如果我们不去改变 text 的值,那么 normalizedText 就不会重新计算,也就是说,normalizedText 会缓存其求值结果,直到其依赖 text 发生改变。我们可以测试一下:

3、双向绑定

我们可以利用计算属性的 getter 和 setter 实现数据的双向绑定:

使用场景:计算属性适合用在模板渲染中,某个值是依赖了其它的响应式对象甚至是计算属性计算而来

上一篇 下一篇

猜你喜欢

热点阅读