Vue3 composition API: 使用 computed 函数替换 computed properties

选项式 API 中的计算属性:

模板中如果要输出一些数据,应优先考虑使用 computed 属性。

如果使用 methods, 那么,页面上发生任何变化,methods 里的方法都无条件执行一遍,因为 Vue 不知道什么发生了变化,所以为了保险起见,methods 里的方法全部执行。

computed: {
	// 应该像数据属性一样命名
	// 虽然本质上 fullname 仍是一个方法
	fullname() {
	}
}

使用计算属性要像使用数据属性或者变量一样,不能加括号,因为不是调用,只是指向。例如下面的 fullname 后面不能加括号,不能写成 fullname() 的形式。

<template>
	<p> My name: {{ fullname }} <p>
</template>

计算属性本质上类似于方法,但是有一个重要的区别:Vue 明白它们的依赖,所以仅仅当某个依赖变化时才会重新计算。

所以在输出数据时,和使用 methods 相比,使用 computed 属性在性能上更有优势, 是更好的做法。

使用 methods 的场合:

  1. 如果你确定,当页面上发生任何改变时,某个值都需要重新计算一遍,那么此时使用 methods。(多数情况并非如此)
  2. events 总是与 methods 绑定。

组合式API: computed 属性替换成 computed 函数

  1. 首先需要 import computed 函数:
import { ref, computed } from 'vue';
  1. 然后 computed 函数的参数是一个函数 :
const uName = computed(function () {
      return firstName.value + ' ' + lastName.value;
    });

setup() 函数中,可以读取 uName.value, 但是不能修改。
计算属性实质上也是一个ref,但是是一个只读的 ref。

代码举例:

<template>
  <section class="container">
    <h2>{{ userName }}</h2>
    <h3>{{ age }}</h3>
    <button @click="setAge">Change Age</button>
    <div>
      <input type="text" placeholder="First Name" @input="setFirstName" />
      <input type="text" placeholder="Last Name" @input="setLastName" />
    </div>
  </section>
</template>

<script>
import { ref, computed } from 'vue';

export default {
  setup() {
    const firstName = ref('');
    const lastName = ref('');
    const uAge = ref(31);
    const uName = computed(function () {
      return firstName.value + ' ' + lastName.value;
    });

    const setNewAge = () => (uAge.value = 32);

    function setFirstName(event) {
      firstName.value = event.target.value;
    }
    function setLastName(event) {
      lastName.value = event.target.value;
    }
    return {
      userName: uName,
      age: uAge,
      setAge: setNewAge,
      setFirstName,
      setLastName,
    };
};
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值