当前位置: 首页 > news >正文

Vue的计算属性和侦听器有什么区别,在什么场景下使用它们?

大白话Vue的计算属性和侦听器有什么区别,在什么场景下使用它们?

1. 计算属性和侦听器的基本概念

在 Vue 里,计算属性和侦听器都是处理数据的手段,不过它们的用途和工作方式存在差异。

计算属性

计算属性就像是个“智能计算器”。它基于现有的数据算出新的数据,而且这个计算结果会被缓存起来。只有当依赖的数据发生变化时,才会重新计算。这就好比你要算两个数的和,只要这两个数不变,和也就不变,不用每次都重新算一遍。

侦听器

侦听器像是个“小侦探”。它会盯着某个数据的变化,一旦这个数据有变动,就会执行相应的操作。这就好比你在等快递,一直留意着快递状态的更新,状态一变你就知道下一步该干啥了。

2. 代码示例说明区别和适用场景

计算属性示例
<template>
  <!-- 创建一个简单的输入框,用来输入数字 -->
  <div>
    <input v-model="num1" type="number" placeholder="输入第一个数字">
    <input v-model="num2" type="number" placeholder="输入第二个数字">
    <!-- 显示计算属性的结果 -->
    <p>两数之和: {{ sum }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 定义两个变量,用来存储输入的数字
      num1: 0,
      num2: 0
    };
  },
  computed: {
    // 定义一个计算属性 sum
    sum() {
      // 计算 num1 和 num2 的和
      return parseInt(this.num1) + parseInt(this.num2);
    }
  }
};
</script>

适用场景:当你需要根据现有的数据计算出新的数据,而且这个计算逻辑比较复杂,不希望在模板里写一大串代码时,就可以用计算属性。比如上面的例子,计算两个数的和,用计算属性让代码更清晰,而且计算结果会被缓存,提高性能。

侦听器示例
<template>
  <!-- 创建一个输入框,用来输入信息 -->
  <div>
    <input v-model="message" placeholder="输入信息">
    <!-- 显示转换后的大写信息 -->
    <p>大写信息: {{ upperCaseMessage }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 定义一个变量,用来存储输入的信息
      message: '',
      // 定义一个变量,用来存储转换后的大写信息
      upperCaseMessage: ''
    };
  },
  watch: {
    // 监听 message 变量的变化
    message(newValue) {
      // 当 message 变化时,将其转换为大写并赋值给 upperCaseMessage
      this.upperCaseMessage = newValue.toUpperCase();
    }
  }
};
</script>

适用场景:当你需要在某个数据发生变化时执行一些额外的操作,比如发送网络请求、更新其他数据等,就可以用侦听器。像上面的例子,当输入的信息变化时,把它转换成大写。

3. 总结

  • 计算属性:适合基于已有数据计算新数据,能提高性能,让模板代码更简洁。
  • 侦听器:适合在数据变化时执行额外操作,比如异步操作、复杂的业务逻辑等。

在 Vue 中如何使用计算属性和侦听器?

下面为你详细介绍在 Vue 中如何使用计算属性和侦听器,并给出示例代码。

计算属性的使用

计算属性是基于响应式依赖进行缓存的,只有当依赖的数据发生改变时,才会重新计算。它的使用场景通常是根据已有的数据计算出新的数据。

语法

在 Vue 组件中,使用 computed 选项来定义计算属性,它是一个对象,每个属性都是一个函数。

示例代码

下面是一个简单的 Vue 组件示例,展示了如何使用计算属性来计算一个人的全名:

<template>
  <div>
    <!-- 输入姓氏 -->
    <input v-model="firstName" placeholder="输入姓氏">
    <!-- 输入名字 -->
    <input v-model="lastName" placeholder="输入名字">
    <!-- 显示全名 -->
    <p>全名: {{ fullName }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 存储姓氏
      firstName: '',
      // 存储名字
      lastName: ''
    };
  },
  computed: {
    // 定义计算属性 fullName
    fullName() {
      // 计算全名
      return this.firstName + ' ' + this.lastName;
    }
  }
};
</script>    

侦听器的使用

侦听器用于监听数据的变化,并在数据变化时执行相应的操作。它适用于需要在数据变化时执行异步操作或复杂逻辑的场景。

语法

在 Vue 组件中,使用 watch 选项来定义侦听器,它是一个对象,每个属性对应一个要监听的数据,值可以是一个函数,也可以是一个对象,用于配置更多选项。

示例代码

以下是一个简单的 Vue 组件示例,展示了如何使用侦听器来监听一个人的年龄变化,并在年龄变化时输出一条消息:

<template>
  <div>
    <!-- 输入年龄 -->
    <input v-model="age" type="number" placeholder="输入年龄">
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 存储年龄
      age: 0
    };
  },
  watch: {
    // 监听 age 数据的变化
    age(newValue, oldValue) {
      // 输出年龄变化的消息
      console.log(`年龄从 ${oldValue} 变为 ${newValue}`);
    }
  }
};
</script>    

总结

  • 计算属性:适用于根据已有数据计算新数据的场景,会缓存计算结果,提高性能。
  • 侦听器:适用于在数据变化时执行异步操作或复杂逻辑的场景。

相关文章:

  • ChatGPT降低论文AIGC重复率的提示词合集(高效降重方法)
  • Milvus Java SDK
  • 5个视角、5等级及10档次:《数字化转型领域 参考架构》国家标准正式出台
  • Baklib企业CMS的核心功能是什么?
  • SvelteKit 最新中文文档教程(9)—— 部署静态站点与单页应用
  • TDengine 用户权限管理
  • 【Unity】批处理和实例化的底层优化原理(未完)
  • 原子化CSS
  • 23种设计模式-代理(Proxy)设计模式
  • 8路CXP相机采集系统介绍
  • 18,C++——哈希
  • win32汇编环境,网络编程入门之十一
  • 计算机网络入门:物理层与数据链路层详解
  • Apache Spark - 用于大规模数据分析的统一引擎
  • 原开源鸿蒙仓库停止更新
  • 【Pandas】pandas Series plot.pie
  • ffmpeg系列(三)—— 音频重采样
  • Edge打不开证书失效的网站
  • Spring、Spring Boot与Spring Cloud深度解析:核心关系与实战应用指南
  • Trae开发贪食蛇小游戏
  • 解放日报:服务国家战略,加快建成科技创新高地
  • 武汉楼市新政:二孩、三孩家庭购买新房可分别享受6万元、12万元购房补贴
  • 上海科创再出发:“造星”的城和“摘星”的人
  • 应急管理部派出工作组赴山西太原小区爆炸现场指导救援处置
  • 城市更新·简报│中央财政支持城市更新,倾斜超大特大城市
  • 国台办:相关优化离境退税政策适用于来大陆的台湾同胞