computed

选项式API中使用computed:

export default {
  data() {
    return {
      message: "helloWord",
    };
    o;
  },
  computed: {
    //计算属性,只要依赖值不变,就不会重新计算(有缓存),计算属性将基于它们的响应依赖关系缓存,提高性能
    // reverseMsg: function () {
    //   console.log("计算属性");
    //   return this.message.split("").reverse().join("");
    // },
    
    //完整的写法
    //每一个计算属性都有一个getter和setter
    reverseMsg: {
      //计算属性一般是 没有set方法,计算属性是只读属性
      set: function (newValue) {
        //在计算或更改计算属性的时候调用
        console.log(newValue);
        this.message = newValue;
      },
      get: function () {
        console.log("计算属性2");
        return this.message.split("").reverse().join("");
      },
    },
  },
  methods: {
    reverseMessage: function () {
      console.log("methods");
      return this.message.split("").reverse().join("");
    },
  },
};
</script>
<template>
  <p>{{ message }}</p>
  <!-- 第一种:js表达式,总共会计算三次 -->
  <p>{{ message.split("").reverse().join("") }}</p>
  <p>{{ message.split("").reverse().join("") }}</p>
  <p>{{ message.split("").reverse().join("") }}</p>
<!-- 第二种:计算属性,只计算一次 -->
  <p>{{ reverseMsg }}</p>
  <p>{{ reverseMsg }}</p>
  <p>{{ reverseMsg }}</p>
  <!-- 第三种:方法,计算三次 -->
  <p>{{ reverseMessage() }}</p>
  <p>{{ reverseMessage() }}</p>
  <p>{{ reverseMessage() }}</p>
  <button @click="reverseMsg = '你好'">改变reverseMsg</button>
</template>

组合式API中使用computed:

// 组合式:将同一个逻辑关注点相关代码收集在一起
  setup() {
    const counter = ref(0);
    const msg = ref("helloWord");
    const reverseMsg = computed(() => {
      //返回一个带有value属性的对象
      return msg.value.split("").reverse().join("");
    });
    console.log(reverseMsg.value); //有value属性

    const user = reactive({
      name: "张三",
      age: 18,
      reverseMsg: computed(() => {
        return msg.value.split("").reverse().join("");
      }),
    });
    console.log(user.reverseMsg); //没有value属性
    return { counter, user, msg };
  },

计算属性值会基于其响应式依赖被缓存,方法调用总是会在重渲染发生时再次执行函数

Getter 不应有副作用

计算属性的 getter 应只做计算而没有任何其他的副作用,这一点非常重要,请务必牢记。举例来说,不要在 getter 中做异步请求或者更改 DOM!一个计算属性的声明中描述的是如何根据其他值派生一个值。因此 getter 的职责应该仅为计算和返回该值

避免直接修改计算属性值

从计算属性返回的值是派生状态。可以把它看作是一个“临时快照”,每当源状态发生变化时,就会创建一个新的快照更改快照是没有意义的,因此计算属性的返回值应该被视为只读的,并且永远不应该被更改——应该更新它所依赖的源状态以触发新的计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值