从0开始vue3(六) | 计算属性computed详解

6,338 阅读2分钟

「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战」。

vue3慢慢学系列!🙉

计算属性computed

为什么需要使用计算属性?

一些时候在模板内直接使用表达式会比较方便,但是如果在模板中放入太多的逻辑会让模板过重且难以维护。例如:

image-20220204160643995

如果要在多个地方都用到全名,一直这样写会麻烦。所以对于比较复杂的逻辑或者需要频繁使用相同计算结果的,都应当使用计算属性。

改写成计算属性

image-20220204161821168

修改计算属性的结果

这个时候,你如果对计算出来的结果fullName进行修改,将会得到一个警告,提示你计算出来的东西是一个只读属性。

image-20220204154422447

所以想要修改的话还需要提供一个setter。

image-20220204161904431

Vue3的计算属性写法

vue2都是上面那样写,vue3同样兼容,只不过vue还可以写成组合式的。

基础写法

<p>结果:{{sum}}</p>
  
<script setup>
  import { ref, computed } from "vue"

  const a = ref(1)
  const b = ref(2)
  let sum = computed(()=>{
    return a.value + b.value
  })

</script>

计算多个

  let sum = computed(()=>{
    return a.value + b.value
  })

  let mul = computed(()=>{
    return a.value * b.value
  })

改成可修改

let mul = computed({
    get:()=>{
      return a.value *10
    },
    set:(value)=>{
      return a.value = value/10
    }
})

代替filters过滤器

在 2.x 中,开发者可以使用过滤器来处理通用文本格式。从 Vue 3.0 开始,过滤器已移除,且不再支持。官方给的建议是用方法调用或计算属性来替换它们。

例如

image-20220204183410419

computed计算属性传参

其实写法上差不多,但是可以看到computed我们用的不是直接传参,如果直接传参,你会发现报错了

image-20220204184032953

原因

computed 计算属性并没有给定返回值,我们调用的是一个函数,而 computed 内部返回的并不是一个函数,所以就会报错:xxx is not a function。

解决办法

需要在计算属性 内部返回一个函数。修改代码如下:

image-20220204184805461

完整的vue3的写法

	<p>{{ accountInUSD(accountBalance) }}</p>
	 
	<script setup>
      import {ref, computed } from "vue"
      const accountBalance = ref(100);
      const accountInUSD = computed(()=>{
         return function(value){
           return '$' + value
         }
       })
   </script>

结尾

欢迎勘误💥

参考资料:

computed属性

过滤器移除


🎨【点赞】【关注】不迷路,更多前端干货等你解锁

往期推荐

👉 JavaScript的Proxy代理怎么用?

👉 JS中的getter和setter你会用吗?

👉 深入理解ES6箭头对象

👉 JS的装饰器模式实例分析