computed的使用

computed() 函数用来创建计算属性,计算属性分为只读计算属性和可读写的计算属性,返回值是 ref 实例。

创建只读计算属性,代码如下。

<template>
  <div>
    普通属性: {{ num }}
    <br />
    计算属性:{{ numAdd }}
    <br />
    <button @click="addOne">修改普通属性</button>
    <button @click="fn">修改计算属性</button>
  </div>
</template>

<script>
// 1.引用 computed
import { ref, computed } from "vue";

export default {
  setup() {
    // 2.计算属性一般依赖于普通属性,先声明普通属性
    var num = ref(10);
    // 3.使用 computed() 函数创建计算属性
    var numAdd = computed(() => {
      return num.value + 1;
    });
    // 4.单击按钮修改普通属性值
    // 结论:可以修改
    var addOne = () => {
      num.value++;
    };
    // 5.单击按钮修改计算属性值
    // 结论:不生效
    var fn = () => {
      console.log(numAdd.value);
      //  numAdd.value + 1  // 这行代码没有实际效果,因为计算属性是只读的
    };
    return {
      num,
      numAdd,
      addOne,
      fn,
    };
  },
};
</script>

创建可读写的计算属性,代码如下。

<template>
  <div>
    普通属性: {{ num }}
    <br />
    计算属性:{{ numAdd }}
    <br />
    <button @click="addOne">修改普通属性</button>
    <button @click="fn">修改计算属性</button>
  </div>
</template>

<script>
// 1.引用 computed
import { ref, computed } from "vue";

export default {
  setup() {
    // 2.计算属性一般依赖于普通属性,先声明普通属性
    var num = ref(10);
    // 3.使用 computed() 函数创建可读写的计算属性
    var numAdd = computed({
      // 取值
      get: () => {
        return num.value + 1;
      },
      // 赋值
      set: (val) => {
        num.value = val; // 修改 num 的值,从而影响 numAdd
      },
    });
    // 4.单击按钮修改普通属性值
    // 结论:可以修改
    var addOne = () => {
      num.value++;
    };
    // 5.单击按钮修改计算属性值
    // 结论:可以修改
    var fn = () => {
      numAdd.value = 100; // 调用 set 方法,修改 numAdd 的值
    };
    return {
      num,
      numAdd,
      addOne,
      fn,
    };
  },
};
</script>