vue3中的computed计算属性

Vue 3 中的 computed 计算属性是一种高级特性,它使你能够在不显式修改或触发重新渲染的情况下,基于组件的响应式状态(例如由 refreactive 创建的数据)计算出新的值。计算属性自动追踪其依赖关系,并且只有当这些依赖项发生变化时,才会重新计算其值,这一特性显著提升了应用的性能。

核心特性

1. 自动缓存

Vue 的计算属性会自动缓存上一次计算的结果,如果依赖的数据没有变化,再次访问计算属性时,它会直接返回之前计算的值,而不会重复执行计算逻辑。

2. 响应式更新

当计算属性依赖的响应式数据发生变化时,Vue 会自动感知并重新计算计算属性的值,确保界面能够及时反映出数据的最新状态。

3. 声明式编程

通过定义计算属性,你可以将复杂的逻辑从模板中抽离出来,使得代码更加清晰和易于维护。在模板中,你只需像访问普通数据一样使用计算属性,无需关心其背后的计算逻辑。

4. 可读写

默认情况下,计算属性是只读的,但 Vue 允许你定义一个带有 getset 方法的对象来创建可写的计算属性,这样你不仅可以获取计算后的值,还能通过设置新值来影响依赖的原始数据。

5. 模板友好

在模板表达式中使用计算属性时,你不需要添加 .value,Vue 会自动处理解包过程,使得模板代码更加简洁。

使用场景

- 数据处理

当需要基于现有数据计算出新的展示数据时,比如格式化日期、计算总价等。

- 逻辑复用
  • 如果某些计算逻辑被多个地方使用,将其封装成计算属性可以避免代码重复。
- 提高性能
  • 对于复杂的计算逻辑,尤其是那些涉及多个数据依赖的情况,使用计算属性可以有效减少不必要的计算。

示例

<template>
    <div id="list">
        姓:<input type="text" v-model="sotr.name"><br>
        名:<input type="text" v-model="sotr.ming"><br>
        <span>{{fast}}---{{sotr.ming}}</span>
        <!-- 显示计算后的名字初始状态 -->
        <span>{{ fast }}</span>
        <!-- 重复元素以展示视觉效果 -->
        <span>{{ fast }}</span>
        <span>{{ fast }}</span>
        <span>{{ fast }}</span>
        <span>{{ fast }}</span>
        <button @click="listname">点击修改名字为li_si</button>
    </div>
</template>
<script lang="ts">
export default {
    name:"list"
}
</script>
<script setup lang="ts">

import {reactive,computed} from 'vue'

// 初始化响应式对象用于存储姓名和名
let sotr = reactive({
    name:"zhang",
    ming:"san"
})

// 定义一个计算属性,用于特定格式化并显示姓名
let fast = computed({
    get(){
        // 格式化姓名,使第二个字符大写并连接剩余部分
        return sotr.name.charAt(1).toUpperCase() + sotr.name.slice(1) 
    },
    set(val){
        // 解析新值并相应更新`sotr`对象
        console.log("设置",val);
        const [arr1,arr2] = val.split("_")
        sotr.name = arr1
        sotr.ming = arr2
    }
})

/**
 * 更新计算的姓名属性为新值。
 * 此函数直接触发`fast`计算属性的setter。
 */
function listname(){
    // 将计算的姓名属性设置为新值
    fast.value = 'li_si'
}
</script>
<style scoped>
#list{
    width: 100%;
    height: 500px;
    background-color: rgb(255, 204, 0);
}
.lo{
    text-align: center;
    padding-top: 10px;
}
span{
    text-align: center;
    display: block;
}
</style>

computed计算属性是有缓存的,方法是没有缓存的
这段代码是一个Vue 3的单文件组件示例,使用了Composition API(通过<script setup>语法糖),展示了如何使用reactivecomputed来创建和管理响应式数据以及计算属性。下面是详细的解释:

HTML模板部分 (<template>)

  • 提供了两个输入框,分别绑定到响应式对象sotrnameming属性上,使用v-model实现双向数据绑定。
  • 显示了计算属性fast的值,以及多次重复展示以观察视觉效果。
  • 有一个按钮,点击时会调用listname方法来修改计算属性的值。

<script setup>部分

  • 引入了Vue的reactivecomputed函数。
  • 使用reactive创建了一个响应式对象sotr,初始化有nameming两个属性。
  • 定义了一个计算属性fast,它有一个get函数用于计算显示的名字(将sotr.name的第二个字符转为大写,然后连接其余部分),和一个set函数用于处理外部对fast的赋值,这里将传入的值(预期格式为"首字母_名")解析后更新sotrnameming属性。
  • 定义了listname方法,用于直接修改fast的值为'li_si',这将触发计算属性的set方法,进一步更新sotrnamelimingsi

<style scoped>部分

在这里插入图片描述

  • 提供了一些CSS样式,设置了组件的背景颜色、文本居中、内边距等,以美化页面显示。

功能概述

这个组件展示了如何使用Vue 3的响应式系统和计算属性来动态更新界面。用户可以通过输入框更改姓名的各个部分,而计算属性fast则自动根据这些输入更新显示的名字,同时保持特定的格式化规则(如名字的第二个字符大写)。点击按钮会触发一个事件,通过计算属性的setter逻辑,快速地把名字改为预设的“李思”。整个过程中,Vue的响应式系统确保了界面的自动更新,体现了Vue在处理状态管理和界面绑定上的高效和简洁。

### Vue3 中 `computed` 计算属性的使用方法 在 Vue 3 中,`computed` 是一种用于定义计算属性的强大工具。它允许开发者以声明式的方式处理响应式数据的复杂逻辑或转换操作[^1]。计算属性的核心特性在于它的 **惰性求值** 和 **缓存机制**,这意味着只有当其依赖的数据发生改变时,计算属性才会被重新评估。 以下是关于如何在 Vue 3 中使用 `computed` 属性的具体说明以及代码示例: #### 基本语法 计算属性可以通过两种方式实现:选项式 API 或组合式 API (Composition API)。下面分别介绍这两种情况下的写法。 ##### 选项式 API 示例 如果使用的是传统的选项式 API,则可以直接在组件的 `computed` 配置项中定义计算属性[^2]。 ```javascript export default { data() { return { firstName: &#39;John&#39;, lastName: &#39;Doe&#39; }; }, computed: { fullName() { // 定义一个名为fullName的计算属性 return `${this.firstName} ${this.lastName}`; } } }; ``` 在这个例子中,`fullName` 是一个计算属性,它会自动追踪 `firstName` 和 `lastName` 的变化,并返回更新后的全名字符串。 ##### 组合式 API 示例 对于现代项目推荐使用的 Composition API,可以借助 `ref` 来管理状态变量,并通过 `computed` 函数来创建计算属性[^3]。 ```javascript import { ref, computed } from &#39;vue&#39;; export default { setup() { const firstName = ref(&#39;Jane&#39;); const lastName = ref(&#39;Smith&#39;); const fullName = computed(() => { return `${firstName.value} ${lastName.value}`; }); return { firstName, lastName, fullName }; } }; ``` 在此案例里,我们利用了 `ref` 创建两个可变的状态变量 (`firstName`, `lastName`) 并将其绑定到视图上;接着用 `computed` 构建了一个只读版本的 `fullName` 属性,该属性会在任何基础字段变动时动态调整显示的内容。 #### 在模板中的调用 无论采用哪种形式编写计算属性,在 HTML 模板内的访问都非常简单直观。只需像普通对象成员一样引用即可。 ```html <template> <div> <!-- 调用计算属性 --> Full Name: {{ fullName }} <!-- 修改原始数据 --> First Name: <input v-model="firstName"> Last Name: <input v-model="lastName"> </div> </template> ``` 上述片段展示了如何将输入框与模型关联起来同步修改源数据的同时触发相应计算属性的变化效果。 --- ### 总结 综上所述,Vue 3 提供了灵活多样的途径去运用 `computed` 功能简化业务场景下频繁涉及的操作流程。无论是传统还是新型开发模式都能很好地支持这一特性的引入并发挥巨大作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值