Vue3使用computed计算属性方式总结

计算属性:需要对数据进行二次运算才使用,里面的值不变调用的话就使用缓存,除非里面依赖的数据项发生改变才会调用函数进行再次运算,依赖项可以有多个

直接对原始值进行二次计算

<template>
	<h2>计算属性</h2>
    <div style="margin-bottom: 10px;">
      <span>初始值{{ count }}</span> |
      <span>双倍添加: {{ doubleCount }}</span>
      <div>
        <el-button @click="count++">+1</el-button>
      </div>
    </div>
</template>
<script setup>
const count = ref(1)
const doubleCount = computed(() => {
  return count.value * 2
})
</script>

接收外部的值,传值计算

<template>
 	<h2>计算属性传值</h2>
	<div>
        <div v-for="item in users" :key="item.id" class="info">
            <span>姓名:{{ item.username }}</span>
            <span>存款:{{ item.deposit }}</span>
            <span>贷款:{{ item.loans }}</span>
            <span class="active">账户余额:{{ accountBalance(item) }}</span>
        </div>
    </div>
</template>
<script setup>
// 模拟后端返回的数据
const users = ref([
  {
    username: '张三',
    deposit: 300000,
    loans: 2000000,
    id: 1
  },
  {
    username: '李四',
    deposit: 80000,
    loans: 100000,
    id: 2
  },
  {
    username: '王五',
    deposit: 600000,
    loans: 0,
    id: 3
  }
])
const accountBalance = computed(() => {
  return function(item) {
    const {deposit, loans} = item
    const account = deposit - loans
    return '¥\n' + account
  }
})
</script>

grtter/setting

<template>
  <div>{{ fullName }}</div>
</template>

<script setup>
import { ref, computed } from 'vue'
const fristName = ref('Hello')
const lastName = ref('World')
const fullName = computed({
  get() {
    return fristName.value + ' ' + lastName.value
  },
  set(value) {
    const names = value.split(' ')
    fristName.value = names[0]
    lastName.value = names[1]
  }
})
setInterval(() => {
  fullName.value = 'Hello Tom'
}, 3000)
</script>

<style lang="scss" scoped></style>

计算属性的 getter 应只做计算而没有任何其他的副作用,这一点非常重要,请务必牢记。举例来说,不要改变其他状态、在 getter 中做异步请求或者更改 DOM

Vue 3 中,`computed` 计算属性是一种用于声明依赖响应式数据的派生状态的机制。它适用于那些需要基于其他响应式数据进行复杂逻辑处理或变换的场景,其核心特点是**缓存机制**,即当依赖的数据未发生变化时,计算属性会直接返回之前的结果,而不会重复执行计算过程[^3]。 ### 基本使用方法 在 Vue 3 中,可以使用 `setup()` 函数或组合式 API 中的 `computed` 函数来定义计算属性。以下是一个基本示例: ```javascript import { ref, computed } from &#39;vue&#39;; export default { setup() { const firstName = ref(&#39;John&#39;); const lastName = ref(&#39;Doe&#39;); const fullName = computed(() => { return `${firstName.value} ${lastName.value}`; }); return { firstName, lastName, fullName }; } }; ``` 在模板中可以直接使用 `fullName`,它会根据 `firstName` 和 `lastName` 的变化自动更新。 ### 复杂场景示例 当计算属性涉及更复杂的逻辑时,例如处理数组或对象时,`computed` 同样适用。以下是一个处理数组的示例: ```javascript import { ref, computed } from &#39;vue&#39;; export default { setup() { const numbers = ref([10, 20, 30, 40, 50]); const filteredNumbers = computed(() => { return numbers.value.filter(num => num > 25); }); return { numbers, filteredNumbers }; } }; ``` 在这个例子中,`filteredNumbers` 会根据 `numbers` 数组的进行过滤,并且只有当 `numbers` 发生变化时才会重新计算。 ### 使用技巧与最佳实践 1. **避免副作用**:`computed` 应该保持纯净,不应包含副作用(如数据修改、异步操作等),否则可能导致难以调试的问题[^2]。 2. **利用缓存优势**:对于需要频繁访问且计算开销较大的逻辑,使用 `computed` 可以显著提升性能。 3. **合理拆分逻辑**:如果计算属性逻辑过于复杂,建议拆分成多个计算属性,以提高可维护性和可测试性[^3]。 ### 常见误区 - **与 `methods` 混淆**:`methods` 中的方法会在每次组件重新渲染时执行,而 `computed` 则会缓存结果,只有在依赖发生变化时才会重新计算。 - **过度使用**:并非所有逻辑都适合放入 `computed`,对于简单的数据变换或不需要缓存的场景,使用 `methods` 更为合适。 通过上述示例和技巧,开发者可以在 Vue 3 中充分利用 `computed` 计算属性的优势,提升应用的性能和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值