Vue 中的 watch 和 computed 的区别是什么?

news/2025/2/10 8:22:36/

在 Vue.js 中,watchcomputed 都是用来监听数据变化的方式,但它们的使用方式和实现机制有所不同,下面是它们的区别:

✨ 实现机制

watch 监听的是一个具体的数据,当数据变化之后会执行相应的回调函数;computed 属性就像一个响应式的计算属性,是基于所依赖的数据进行缓存处理的。当依赖的数据变化时,computed 属性会自动更新缓存,而数据发生变化时不会立即执行相应的操作,而是等待下一次任务队列的更新时机。

✨ 适用场景

  • watch 更适合有副作用的数据监听,例如一些需要后台请求的数据;
  • computed 更适合基于已有数据(data 和 props)计算得出的属性,并且需要缓存的场景。

✨ 功能

  • watch 可监听多个数据,可以在数据变化时做出相应的处理;
  • computed 只支持计算属性的缓存,当依赖的数据变化时会自动更新缓存,而且可以设置 gettersetter

✨ 性能

  • watch 的性能较弱,因为它监测的是具体某一个数据或多个数据的变化,如果监听的数据过多,那么 watch 会对整个应用的性能造成不良影响;
  • computed 的性能较好,因为它本质上是一个缓存,只有当数据发生变化时才会更新缓存,不会像 watch 一样无脑地遍历监听数据。

✨ 监听数据的不同

  • watch 监听的是一个具体的数据,可以是一个 data 中的属性或者是一个组件外部传递进来的 prop。当该数据发生变化时,会执行相应的回调函数。
  • computed 是一个计算属性,它是一个基于已有数据(data 和 props)计算得出的属性,在模板中使用时,就像一个响应式属性一样。当计算依赖的数据发生变化时,计算属性会自动更新,并且计算属性具有缓存机制,在计算属性依赖的数据未发生变化时,直接返回缓存结果。

✨执行时机的不同

  • watch 是当监听的数据发生变化时就会立即执行回调函数,用于监听有异步操作的数据。
  • computed 是每当依赖的数据发生变化时,才会重新计算,用于在模板中处理数据的逻辑

✨实现方式的不同

  • watch 主要是通过 $watchwatch 对象来实现,$watch 可以监听单个数据的变化,watch 对象可以监听多个数据的变化。
  • computed 是通过 computed 属性来实现的,它接收一个对象作为参数,对象中的 key 对应计算属性的名称,value 对应计算属性的逻辑函数。

总之,watch 更加灵活,涉及到的数据范围也更广泛,但相对而言性能上略逊一筹;computed 更加简洁,并且能够节省性能,但是只适合对已有的数据进行计算得出结果返回,一般情况下computed 是用来处理复杂的逻辑运算,在模板中调用方便;watch 则是用来监听一些数据变化,通常是需要执行异步操作时使用。


http://www.ppmy.cn/news/73119.html

相关文章

总结JVM重要知识点

一.类加载和创建对象的过程 1.类加载 1.编译 : 将源码文件(.java)编译成JVM可以解释的.class文件 . 语法分析>语义分析>注解处理 , 生成class文件 2.加载 : 装载 : 字节码本来存储在硬盘上 , 需要运行时 , 有类加载系统负责将类的信息加载到内存中(方法区) , 使用的是类…

JavaScript使用一个数组对另一个对象数组进行过滤

假设我们有一个对象数组 objs,其中每个对象都有一个 name 属性,我们希望使用一个数组 names 对 objs 数组进行过滤,只保留那些 name 属性在 names 数组中的对象。我们可以使用 filter() 方法来实现这个功能。 const objs [{ id: 1, name: &…

HashMap源码详解

文章目录 简单介绍提出问题流程说明及验证put元素的流程怎样找到要存储的下标位置的?什么时候会扩容? 加载因子、阈值这些有什么含义?怎样扩容的?扩容的流程.链表可以转成红黑树, 那会从红黑树转成链表吗?什么时候会从链表转成红黑树 小总结 简单介绍 HashMap是Java中最最…

迪杰斯特拉算法的应用

1.问题描述 穷游&#xff1f;“穷”游&#xff1f;Time Limit: 1000 MSMemory Limit: 10000 KB Description 贫穷的小A有一个梦想&#xff0c;就是到t国去一次穷游&#xff0c;但现实是残酷的。小A所在的世界一共有n(n<500) 个国家&#xff0c;国家与国家之间总共有E(E&l…

Java 中有哪些常用的集合类?

在 Java 中&#xff0c;有许多常用的集合类可供使用。以下是一些常见的集合类&#xff1a; ArrayList&#xff1a;基于数组实现的动态数组&#xff0c;提供了动态添加、删除和访问元素的功能。LinkedList&#xff1a;基于链表实现的双向链表&#xff0c;提供了在任意位置插入、…

[Hadoop]大数据导论与Linux基础

目录 大数据导论 企业数据分析方向 数据分析基本步骤 大数据时代 分布式与集群 Linux操作系统概述 操作系统概念与分类 Linux起源与发展 Linux内核与发行版本 VMware Workstation虚拟机使用 VMware虚拟机概念 VMware虚拟机常规使用 Linux常用基础命令 Linux文件系…

2.数据结构期末复习之顺序表和链表

1.表是可以是线性结构 学号姓名19(数据项)jams(数据项)20(数据项)ming(数据项) 19 jams或 20 ming是数据元表单个的是数据项‘’线性结构可以表示为 19 jams->20 ming2.什么是逻辑结构?:具有相同类型的有限序列(元素排序的位置,排兵布阵操作的方法) a1 a2 a3 .... an (空…

魔改车钥匙实现远程控车:(前传)在macOS上安装使用Arduino

前言 因为最近有个需求需要硬件支持&#xff0c;原本打算使用 Arduino Nano&#xff0c;后来在 Boot 大佬的建议下&#xff0c;买了某宇宙家的 ESP32C3 核心板&#xff0c;对比 Arduino Nano 价格便宜了一大半&#xff0c;而且自身就集成了 WIFI 和 BLE 模块&#xff0c;还不用…