Vue2 与 Vue3 中 Computed 计算属性详解

目录

Vue2 与 Vue3 中 Computed 计算属性详解

一、Vue2 中的 Computed 计算属性

1. 简单写法

2. get 和 set 写法

二、Vue3 中的 Computed 计算属性

1. 简单写法

2. get 和 set 写法

三、总结


在 Vue 开发中,计算属性(computed)是一个非常重要的特性,它可以对数据进行二次计算,为我们的开发带来了很大的便利。本文将结合 Vue2 和 Vue3 的特点,深入探讨 computed 计算属性,并附上相关代码示例。

一、Vue2 中的 Computed 计算属性

在 Vue2 中,computed 计算属性有两种常见的写法。

1. 简单写法

以下是一个 Vue2 中计算属性的简单示例:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>

<body>
  <div id="app">
    <p>AABC 数据:{{AABC}}</p>
    <p>计算属性结果:{{changeSTR}}</p>
    <button @click="changeValue">点击改变</button>
  </div>
  <script>
    new Vue({
      el: '#app',
      data() {
        return {
          AABC: 'AABC',
          ITR: 'initialValue'
        };
      },
      computed: {
        changeSTR() {
          return this.ITR.slice(-1);
        }
      },
      methods: {
        changeValue() {
          // 在 Vue2 中,直接修改计算属性会报错
          // this.changeSTR = 'newValue';
        }
      }
    });
  </script>
</body>

</html>

在上述代码中,我们定义了一个 Vue 实例,其中包含一个数据属性AABCITR,以及一个计算属性changeSTR,它通过对ITR进行切片操作,返回最后一位字符。当我们点击按钮时,尝试直接修改计算属性会报错,因为在 Vue2 中计算属性是只读的。

2. get 和 set 写法

如果我们想要修改计算属性的值,可以使用getset的写法:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>

<body>
  <div id="app">
    <p>AABC 数据:{{AABC}}</p>
    <p>计算属性结果:{{changeSTR}}</p>
    <button @click="changeValue">点击改变</button>
  </div>
  <script>
    new Vue({
      el: '#app',
      data() {
        return {
          AABC: 'AABC',
          ITR: 'initialValue'
        };
      },
      computed: {
        changeSTR: {
          get() {
            return this.ITR.slice(-1);
          },
          set(value) {
            this.ITR = value;
          }
        }
      },
      methods: {
        changeValue() {
          this.changeSTR = 'newValue';
        }
      }
    });
  </script>
</body>

</html>

在这种写法中,我们可以通过get方法获取计算属性的值,通过set方法设置计算属性的值。当我们点击按钮时,调用changeValue方法,修改计算属性changeSTR的值,实际上会通过set方法修改ITR的值,从而触发计算属性的重新计算。

二、Vue3 中的 Computed 计算属性

在 Vue3 中,计算属性的用法与 Vue2 类似,但也有一些细微的变化。

1. 简单写法

以下是一个 Vue3 中计算属性的简单示例:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>

<body>
  <div id="app">
    <p>AABC 数据:{{AABC}}</p>
    <p>计算属性结果:{{changeSTR}}</p>
    <button @click="changeValue">点击改变</button>
  </div>
  <script>
    const App = {
      data() {
        return {
          AABC: 'AABC',
          ITR: 'initialValue'
        };
      },
      computed: {
        changeSTR() {
          return this.ITR.slice(-1);
        }
      },
      methods: {
        changeValue() {
          // 在 Vue3 中,直接修改计算属性同样会报错
          // this.changeSTR = 'newValue';
        }
      }
    };
    const app = Vue.createApp(App);
    app.mount('#app');
  </script>
</body>

</html>

2. get 和 set 写法

Vue3 中也可以使用getset的写法来修改计算属性的值:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>

<body>
  <div id="app">
    <p>AABC 数据:{{AABC}}</p>
    <p>计算属性结果:{{changeSTR}}</p>
    <button @click="changeValue">点击改变</button>
  </div>
  <script>
    const App = {
      data() {
        return {
          AABC: 'AABC',
          ITR: 'initialValue'
        };
      },
      computed: {
        changeSTR: {
          get() {
            return this.ITR.slice(-1);
          },
          set(value) {
            this.ITR = value;
          }
        }
      },
      methods: {
        changeValue() {
          this.changeSTR = 'newValue';
        }
      }
    };
    const app = Vue.createApp(App);
    app.mount('#app');
  </script>
</body>

</html>

在 Vue3 中,使用getset写法修改计算属性的值与 Vue2 类似,通过set方法修改数据属性的值,从而触发计算属性的重新计算。

三、总结

无论是 Vue2 还是 Vue3,计算属性都是一个非常强大的特性,可以帮助我们简化代码,提高开发效率。在使用计算属性时,我们需要注意以下几点:

  1. 计算属性是基于它们的响应式依赖进行缓存的,只有在它们的依赖发生变化时才会重新计算。
  2. 在 Vue2 和 Vue3 中,默认情况下计算属性是只读的,如果想要修改计算属性的值,需要使用getset的写法。
  3. 在面试中,可能会问到关于计算属性的问题,例如计算属性的结果值可以修改吗?答案是可以的,但需要通过特定的写法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值