Vue3常用API之computed计算属性

本文介绍了Vue3中计算属性的使用方法,包括简写和完整写法,并通过实例展示了如何结合reactive响应式数据实现动态更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

computed计算属性

  1. 与vue2中的功能和配置都一致,写法不同
    <template>
        <div>{{person.name}}</div>
    </template>
    import {reactive, computed} from 'vue'
    export default {
        name: 'App',
        setup () {
            const person = reactive({
                firstName: '张',
                lastName: '李'
            })
            // 计算属性-简写
            person.name = computed(() => {
                return person.firstName + lastName.firstName
            })
            // 计算属性-完整写法
            person.name = computed(() => {
                get () {
                    return person.firstName + lastName.firstName
                },
             	set (value) {
                    person.firstName = value.splice(0, 1)
                    person.lastName = value.splice(1, 1)
                }
            })
            return {
                person
            }
        }
    }
    
### 如何在 Vue 3 组合式 API 中实现 computed 计算属性Vue 3 的组合式 API 中,`computed` 函数允许开发者基于其他响应式数据创建派生的状态。这种状态会自动跟踪其依赖项,并在其依赖发生变化时重新计算。 #### 创建一个基本的计算属性 下面是一个简单的例子,展示了如何使用 `setup()` 方法中的 `computed` 来创建一个动态更新的消息字符串: ```javascript import { ref, computed } from &#39;vue&#39;; export default { setup() { const author = reactive({ name: &#39;John Doe&#39;, books: [ &#39;Vue 2 - Advanced Guide&#39;, &#39;Vue 3 - Basic Guide&#39;, &#39;Vue 4 - The Mystery&#39; ] }); // 使用 computed 定义了一个只读的计算属性 const publishedBooksMessage = computed(() => { return author.books.length > 0 ? `${author.name} has written ${author.books.length} book(s).` : "No books available."; }); return { author, publishedBooksMessage }; } } ``` 此代码片段定义了一个名为 `publishedBooksMessage` 的计算属性,当 `author.books` 数组的内容改变时,该消息也会相应地更新[^1]。 #### 复杂逻辑下的计算属性应用 对于更复杂的业务场景,同样可以通过 `computed` 进行处理而不必担心性能问题,因为它们会被缓存直到相关依赖发生变动才会再次求: ```javascript // 假设有一个复杂条件判断的情况 const complexComputedProperty = computed(() => { let result; if (someCondition) { // 执行某些操作... result = performComplexOperation(); } else { // 或者执行另一些不同的操作... result = doSomethingElse(); } return result; }); ``` 这里展示的是在一个假设条件下根据不同情况返回不同结果的方式;实际项目里可以根据具体需求调整内部逻辑[^2]。 #### 可写入的计算属性 除了上述提到的只读形式外,还可以设置带有 setter 和 getter 的可写入版本的计算属性。这使得不仅可以获取到经过加工后的,还能对外部输入做出反应并影响原始数据源: ```javascript const fullName = computed({ get: () => firstName.value + &#39; &#39; + lastName.value, set(newValue) { [firstName.value, lastName.value] = newValue.split(&#39; &#39;); } }); ``` 这段代码实现了对全名字段的操作既可以直接读取也可以通过赋新得方式间接修改两个独立变量 `firstName` 和 `lastName` 的功能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值