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

vue2 - Day02 -计算属性(computed)、侦听器(watch)和方法(methods)

在 Vue.js 中,计算属性(computed)、侦听器(watch)和方法(methods)都是响应式的数据处理方式
在这里插入图片描述


文章目录

      • 1. 方法(Methods)
        • 1.1. 是什么
        • 1.2. 怎么用
          • 示例:
        • 1.3. 特点
        • 1.4. 使用场景
      • 2. 计算属性(Computed)
        • 2.1. 是什么
        • 2.2. 怎么用
          • 示例:
        • 2.3. 特点
        • 2.4. 使用场景
      • 3. 侦听器(Watch)
        • 3.1. 是什么
        • 3.2. 怎么用
          • 示例:
        • 3.3. 特点
        • 3.4. 使用场景
      • 4. 计算属性、侦听器和方法的对比
      • 5. 总结

1. 方法(Methods)

1.1. 是什么

在 Vue 中,方法(methods)是定义在 Vue 实例中的函数,用来处理一些动作或逻辑。它们可以通过事件绑定触发,也可以在代码中显式调用。每次方法被调用时,都会执行其中的逻辑,不会缓存计算结果。

1.2. 怎么用

方法通过 Vue 实例中的 methods 选项定义,可以通过事件触发(如 clicksubmit)或显式调用。

示例:
new Vue({el: '#app',data: {firstName: 'John',lastName: 'Doe'},methods: {fullName() {return this.firstName + ' ' + this.lastName;},greet() {alert('Hello, ' + this.firstName + '!');}}
});
<div id="app"><p>{{ fullName() }}</p> <!-- 调用 fullName 方法 --><button @click="greet()">Greet</button> <!-- 绑定事件,点击时调用 greet 方法 -->
</div>

在这里插入图片描述

1.3. 特点
  • 每次调用都会执行:方法没有缓存机制,每次调用都会执行方法内部的逻辑,可能会有性能开销。
  • 适合执行副作用:方法一般用于处理事件、交互、调用 API、执行动画等。
  • 不能缓存:每次调用方法时,都会重新执行其中的代码。
  • 适合函数逻辑:方法用于处理需要执行的业务逻辑,如响应用户输入、提交表单等。
  • 不依赖于计算属性:方法与计算属性不同,它不关注其他属性的变化,因此不适用于根据响应式数据自动计算和返回结果的场景。
1.4. 使用场景
  • 用于响应用户的输入事件、点击事件等交互,或者需要执行某些即时操作。
  • 适用于没有缓存需求、每次都需要重新计算的场景。

2. 计算属性(Computed)

2.1. 是什么

计算属性(computed)是基于 Vue 实例中的响应式数据计算得来的属性。它的计算结果会被缓存,只有当它依赖的响应式数据发生变化时,计算属性才会重新计算。这使得计算属性非常适合用于基于数据的计算,并且能有效提升性能。

2.2. 怎么用

计算属性通过 Vue 实例中的 computed 选项定义,并像普通属性一样在模板中使用。你可以在 computed 中定义计算属性,Vue 会自动追踪它们依赖的数据,并在数据变化时重新计算。

示例:
new Vue({el: '#app',data: {firstName: 'John',lastName: 'Doe'},computed: {fullName() {return this.firstName + ' ' + this.lastName;}}
});
<div id="app"><p>{{ fullName }}</p> <!-- 使用计算属性 fullName -->
</div>
2.3. 特点
  • 缓存机制:计算属性的值会缓存,只有当它的依赖(如 firstNamelastName)发生变化时,才会重新计算。若依赖数据没有变化,返回的值是缓存的。
  • 自动更新:当依赖的数据发生变化时,计算属性会自动重新计算。
  • 适合用于组合值:如合并字符串、计算价格、格式化日期等。
  • 支持 getter 和 setter:计算属性不仅可以是 getter(获取值),还可以是 setter(设置值)。通过 setter 可以修改依赖的属性。
computed: {fullName: {get() {return this.firstName + ' ' + this.lastName;},set(newValue) {const names = newValue.split(' ');this.firstName = names[0];this.lastName = names[1] || '';}}
}
2.4. 使用场景
  • 用于依赖其他响应式数据进行计算的场景,如组合数据、处理计算属性等。
  • 适合需要缓存计算结果的场景,避免每次访问都重新计算。

3. 侦听器(Watch)

3.1. 是什么

侦听器(watch)用于观察 Vue 实例中的数据变化,并在数据变化时执行某些操作。侦听器非常适合用来处理需要执行副作用的操作,如异步请求、数据持久化或复杂逻辑的处理。

3.2. 怎么用

侦听器通过 Vue 实例中的 watch 选项定义,你可以指定一个数据属性或计算属性来监听,并在该属性发生变化时执行回调。

示例:
new Vue({el: '#app',data: {firstName: 'John',lastName: 'Doe'},watch: {firstName(newVal, oldVal) {console.log(`First name changed from ${oldVal} to ${newVal}`);}}
});
<div id="app"><input v-model="firstName" />
</div>
3.3. 特点
  • 每次数据变化都会触发:侦听器会在目标数据发生变化时立即触发回调函数。
  • 适用于副作用处理:侦听器通常用于处理异步操作或执行数据持久化等副作用操作。
  • 可以监听复杂数据结构:侦听器不仅支持基本数据类型,还支持监听数组和对象的变化,甚至可以进行深度监听。
  • 异步执行:侦听器的回调是异步执行的,不会阻塞页面的渲染。
watch: {// 深度监听对象user: {handler(newValue, oldValue) {console.log('User object changed');},deep: true}
}
3.4. 使用场景
  • 需要对数据变化进行副作用处理时,如发起异步请求、保存到本地存储、触发动画等。
  • 适合监听复杂数据变化(如对象或数组的变化),并在变化时执行逻辑。

4. 计算属性、侦听器和方法的对比

特性方法(methods计算属性(computed侦听器(watch
缓存机制不缓存,每次调用都会执行有缓存,只有依赖的数据变化时才会重新计算没有缓存,每次数据变化都会触发回调
适用场景响应事件和执行逻辑基于数据的计算与组合监听数据变化并处理副作用操作
性能性能较差,每次调用都会重新计算性能较好,缓存计算结果性能相对较差,依赖于回调逻辑的复杂度
是否适合副作用适合处理事件和逻辑操作不适合,计算属性不应包含副作用适合用于执行副作用(如 API 请求、保存数据等)
触发时机每次调用都会触发依赖的数据变化时触发数据变化时触发
使用复杂度简单直观,适合处理简单的逻辑简单,适用于依赖数据的计算适用于复杂数据监听及副作用处理

5. 总结

  • 方法(Methods):适用于事件处理、用户交互和即时执行逻辑。每次调用都会重新执行,性能相对较低,不适合用于数据计算和组合。

  • 计算属性(Computed):适用于基于其他数据计算并缓存的场景。能够避免不必要的重复计算,适合计算组合数据或派生数据。

  • 侦听器(Watch):适用于数据变化时执行副作用操作,如异步请求、数据持久化等。可以监听对象和数组的变化,适合处理复杂的逻辑。

  • 总结选择:

    • 如果需要基于数据计算并缓存结果,使用计算属性。
    • 如果要响应事件或执行即时操作,使用方法。
    • 如果需要监听数据
http://www.lryc.cn/news/506890.html

相关文章:

  • Linux C 程序 【05】异步写文件
  • Liveweb视频汇聚平台支持WebRTC协议赋能H.265视频流畅传输
  • SQL组合查询
  • 方正畅享全媒体新闻采编系统 screen.do SQL注入漏洞复现
  • 【机器学习】【集成学习——决策树、随机森林】从零起步:掌握决策树、随机森林与GBDT的机器学习之旅
  • Flink执行模式(批和流)如何选择
  • LeetCode:101. 对称二叉树
  • LDO输入电压不满足最小压差时输出会怎样?
  • 源码分析之Openlayers中ZoomSlider滑块缩放控件
  • 在Win11系统上安装Android Studio
  • 华为ensp--BGP路径选择-AS_Path
  • Android Java Ubuntu系统如何编译出 libopencv_java4.so
  • WPF Binding 绑定
  • 算法笔记—前缀和(动态规划)
  • 将HTML转换为PDF:使用Spire.Doc的详细指南(二)无水印版
  • V900新功能-电脑不在旁边,通过手机给PLC远程调试网关配置WIFI联网
  • prober.php探针
  • esp8266_TFTST7735语音识别UI界面虚拟小助手
  • 【CSS in Depth 2 精译_086】14.3:CSS 剪切路径(clip-path)的用法
  • 【服务器】MyBatis是如何在java中使用并进行分页的?
  • vue 文本域 展示的内容格式要和填写时保持一致
  • linux-----进程及基本操作
  • [Python学习日记-73] 面向对象实战1——答题系统
  • Win10将WindowsTerminal设置默认终端并添加到右键(无法使用微软商店)
  • AOI外观缺陷检测机
  • 精读 84页华为BLM战略规划方法论
  • 工业摄像机基于电荷耦合器件的相机
  • 13.罗意文面试
  • xxljob window免安装
  • MariaDB 设置 sql_mode=Oracle 和 Oracle 对比验证