Vue中computed、method的区别

Computed 的核心是"计算缓存"

  • 用于基于响应式数据计算新值

  • 缓存机制,依赖不变就不重新计算

  • 计算结果是响应式的(依赖变化会自动更新)

  • 适合模板中频繁使用的计算结果

method 普通方法

  • 普通函数,没有响应式特性

  • 每次调用都会执行

  • 适合事件处理、需要参数的操作

案例

使用方法拼接姓名

javascript 复制代码
<script setup>

import {computed, ref, watch} from "vue";
const firstName = ref("liu");
const lastName = ref("kang");

const fullName = () => {
  console.log("执行方法")
  return firstName.value + " " + lastName.value;
};
</script>

<template>
  全名:{{fullName()}}<br>
  全名:{{fullName()}}<br>
</template>

<style scoped>

</style>

控制台:

可见方法被调用几次就执行几次

使用计算属性拼接姓名

javascript 复制代码
<script setup>

import {computed, ref, watch} from "vue";
const firstName = ref("liu");
const lastName = ref("kang");
const fullName = computed(() => {
  console.log("执行computed")
  return firstName.value + " " + lastName.value;
});

</script>

<template>
  全名:{{fullName}}<br>
  全名:{{fullName}}<br>
</template>

<style scoped>

</style>

控制台:

在依赖并未发生改变的情况下,只执行一次计算属性

如果依赖发生改变的情况:

javascript 复制代码
<script setup>

import {computed, ref, watch} from "vue";
const firstName = ref("liu");
const lastName = ref("kang");
const fullName = computed(() => {
  console.log("执行computed")
  return firstName.value + " " + lastName.value;
});

</script>

<template>
  全名:{{fullName}}<br>
  全名:{{fullName}}<br>
  姓:<input type="text" v-model="firstName"/><br>
  名:<input type="text" v-model="lastName"/>
</template>

<style scoped>

</style>

一开始进入页面,执行一次computed

当依赖发生改变时,立马再次执行computed计算最新的值,改变一次重新计算一次

计算属性是否可以传参?

计算属性不可以传参,以下代码时错误用法:

javascript 复制代码
computed: {
  // 这是错误的!计算属性不能定义参数
  getItemPrice(item) {  // ❌ 不能这样写
    return item.price * this.taxRate
  }
}

// 模板中也不能传参
{{ getItemPrice(item) }}  // ❌ 不工作

如果想要传入参数,可以"曲线救国":

javascript 复制代码
// Vue3 组合式API
import { computed } from 'vue'

// 返回一个函数,该函数可以接收参数
const getItemPrice = computed(() => {
  // 返回一个函数,这个函数可以接收参数
  return (item) => {
    return item.price * taxRate.value
  }
})

// 使用
<template>
  <div v-for="item in items" :key="item.id">
    价格: {{ getItemPrice(item) }}
  </div>
</template>
相关推荐
程序员黑豆2 小时前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
bugcome_com5 小时前
JWT 知识小课堂:从入门到精通,一文吃透 JSON Web Token
前端·json
To_OC5 小时前
写了三天 Next.js,我的 React 世界观被拆了又装回去
前端·全栈·next.js
独泪了无痕5 小时前
viewer.js 安装与配置指南:实现图片预览功能
前端·vue.js
起床学FPGA7 小时前
AI回答问题之后,会自动跳到最下面的问题
开发语言·javascript·ecmascript
Fluxart.ai7 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
why技术7 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端
愚公搬代码8 小时前
【愚公系列】《Android应用案例开发大全》016-LBS类应用掌上杭州(辅助工具类的开发)
android·前端
CodeSheep8 小时前
又一个华为天才少年,离职了!
前端·后端·程序员
kyriewen8 小时前
面试官说"打开你的AI工具"——我才发现,他考的根本不是写代码
前端·人工智能·面试