【Vue3】Computed计算属性基本使用方法

1,684 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情

Comupted 计算属性

当依赖的属性的值发生变化时,才会触发计算属性的更改,如果依赖的属性的值未发生改变,则使用缓存中的属性值。

image.png

上面是Computed的源码,可以看到,它的第一个参数可以是一个getter函数也可以是一个配置对象。它会先用isFunction来判断我们传入的第一个参数是函数还是对象,如果是函数,则将它赋值给getter,如果是配置对象,则将配置对象中的get和set分别赋值给getter和setter,最后返回一个ComputedRefImpl的实例。

所以我们的计算属性就有两种形式了,一种是函数形式,一种是配置对象形式;

函数形式

import {computed, ref} from "vue";

let age = ref < number > (10);
// 函数形式
let myAge = computed < string > (() => `${age.value}岁`);

上面的代码中,只要我们改变age的值发生改变,就会触发computed重新计算myAge的值。

对象形式


<div>{{myAge}}</div>
<button @click="myAge=18">点我</button>
let age = ref < number > (10)
let myAge = computed < string > ({
    get() {
        return age.value + '岁'
    },
    set(newVal) {
        age.value = newVal
    }
})

我们可以使用对象形式来完成一些自定义的操作,比如说我们想要实现一个全选和全不选的功能,就可以使用对象形式,通过自定义getter和setter来实现。

image.png

当我们给计算属性allChecked赋值的时候,就会触发setter函数,然后遍历list数组,将每一项的checked属性改变,进而实现全选和全不选的功能。

除了上面这种用法,我们还可以给Computed属性传参,而实现思路其实也很简单,那就是,计算属性必须返回一个值,但是并没有限制返回值的类型是什么,因此我们可以返回一个带参的匿名函数,接着直接调用它,就可以实现计算属性传参了。

image.png