深度比较Vue 3.0中的computed和watch属性用法与最佳实践

news2024/11/28 4:37:17

摘要:在Vue 3.0中,computed和watch属性是用于处理数据逻辑的重要工具。本文将详细对比这两个属性的工作原理、适用场景以及使用时的注意事项,旨在帮助开发者更有效地选择和使用它们。

一、computed属性

computed属性是Vue 3.0中用于计算数据的强大工具。它依赖于其他数据属性,并在数据变化时自动重新计算。这使得它非常适合执行简单的同步操作。

优点:

  1. 自动更新:每当依赖的数据发生变化时,computed属性会自动重新计算。

  2. 缓存机制:除非依赖的数据发生变化,否则computed属性不会重新计算,这有助于提高性能。

  3. 可读性强:computed属性使代码结构更清晰,易于理解。

注意事项:

  • 避免在computed属性中执行复杂操作:复杂的操作可能会使性能下降,并使代码难以维护。

  • 正确设置依赖:确保computed属性正确地依赖于需要的数据,否则可能导致不正确的计算结果。

二、watch属性

watch属性允许我们监听一个数据属性的变化,并在其变化时执行特定的回调函数。这使得它非常适合执行异步操作或数据量较大的操作。

优点:

  1. 异步处理:watch属性允许我们在数据变化时执行异步或大量数据处理的操作。

  2. 自定义逻辑:通过watch属性,我们可以根据实际需求执行自定义的逻辑。

注意事项:

  • 避免在watch回调中进行复杂操作:复杂的操作可能会阻塞UI,影响用户体验。

  • 注意性能影响:过度使用watch属性可能会对性能产生影响,因此应谨慎使用。

三、适用场景比较

当需要基于其他数据属性进行简单计算时,应使用computed属性。例如,根据姓氏和名字计算姓名。

<div id="app">{{ fullName }}</div>const vm = Vue.createApp({ data() {return {firstName: 'Foo', lastName: 'Bar'}

},computed: {fullName () {return this.firstName +' ' + this.lastName}}}).mount("#app")

当需要监听一个属性的变化并在变化时执行异步或大量数据处理的操作时,应使用watch属性。例如,在用户更改表单数据时进行实时验证或数据备份。

<script lang="ts" setup>  import { Ref, ref, watch } from 'vue';  import { Card } from 'ant-design-vue';  import { useECharts } from '/@/hooks/web/useECharts';

  const props = defineProps({    loading: Boolean,    width: {      type: String as PropType<string>,      default: '100%',    },    height: {      type: String as PropType<string>,      default: '300px',    },  });

  const chartRef = ref<HTMLDivElement | null>(null);  const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);  watch(    () => props.loading,    () => {      if (props.loading) {        return;      }      setOptions({        legend: {          bottom: 0,          data: ['访问', '购买'],        },        tooltip: {},        radar: {          radius: '60%',          splitNumber: 8,          indicator: [            {              name: '电脑',              max: 100,            },            {              name: '充电器',              max: 100,            },            {              name: '耳机',              max: 100,            },            {              name: '手机',              max: 100,            },            {              name: 'Ipad',              max: 100,            },            {              name: '耳机',              max: 100,            },          ],        },        series: [          {            type: 'radar',            symbolSize: 0,            areaStyle: {              shadowBlur: 0,              shadowColor: 'rgba(0,0,0,.2)',              shadowOffsetX: 0,              shadowOffsetY: 10,              opacity: 1,            },            data: [              {                value: [90, 50, 86, 40, 50, 20],                name: '访问',                itemStyle: {                  color: '#b6a2de',                },              },              {                value: [70, 75, 70, 76, 20, 85],                name: '购买',                itemStyle: {                  color: '#5ab1ef',                },              },            ],          },        ],      });    },    { immediate: true },  );</script>

四、最佳实践建议

根据需求选择合适的属性:理解computed和watch的适用场景,根据实际需求选择合适的属性。避免在不必要的场景中使用它们,以提高性能和代码可读性。

  • 正确设置依赖关系:在使用computed或watch时,确保正确设置依赖关系,避免出现不正确的计算或无效的监听。

  • 优化性能:对于需要频繁计算或监听的数据,考虑使用computed属性进行缓存或优化watch回调中的操作,以提高性能。

  • 代码可维护性:编写清晰、简洁的代码,遵循良好的编程习惯。合理使用computed和watch属性,使代码结构清晰易懂,便于维护和扩展。

在实际开发中,根据具体需求选择合适的属性。对于简单的计算和数据依赖,使用计算属性可以提供更好的性能和可读性。而对于复杂的异步操作或大量数据处理,监听属性可以提供更灵活的控制。合理使用这两个特性可以提高代码的可维护性和性能。希望这篇文章能帮助你更好地理解 Vue 3.0 中的计算属性和监听属性。

欢迎关注我的微信技术公众号: 前端组件开发

d848d5658a07453c843277846948c608.png

欢迎加入“前端组件开发学习”交流群,一起学习成长!可关注  “前端组件开发” 公众号后,私信后申请入群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1577048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wpf TreeView 实现动态加载页面

实现以下的效果&#xff0c;在TreeView上点击节点&#xff0c;动态加载右边的页面&#xff0c;如下图所示&#xff1a; 1. 主页面如下&#xff1a; 2. 实现主页面刷新方法 _currentStateViewModel.RefreshState(); _currentStateViewModel就是点击TreeView上的节点&#xff0…

Linux安装最新版Docker完整教程

参考官网地址&#xff1a;Install Docker Engine on CentOS | Docker Docs 一、安装前准备工作 1.1 查看服务器系统版本以及内核版本 cat /etc/redhat-release1.2 查看服务器内核版本 uname -r这里我们使用的是CentOS 7.6 系统&#xff0c;内核版本为3.10 1.3 安装依赖包 …

c++20协程详解(四)

前言 到这就是协程的最后一节了。希望能帮到大家 代码 到这里我们整合下之前二、三节的代码 #include <coroutine> #include <functional> #include <chrono> #include <iostream> #include <thread> #include <mutex> #include <me…

政安晨【AIGC实践】(一):在Kaggle上部署使用Stable Diffusion

目录 简述 开始 配置 执行 安装完毕&#xff0c;一键运行 结果展示 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 人工智能数字虚拟世界实践 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

spring加载类初始化顺序

今天看spring官网的时候&#xff0c;提到了Ordered执行顺序。我当时记得PostConstruct注解会在bean加载后执行&#xff0c;现在又来了一个执行顺序&#xff0c;直接给我整蒙了。 于是我写了一个简单的dom来看看&#xff0c;它是什么&#xff1a; Service("t2ServerImpl&q…

Vue - 你知道Vue中key的工作原理吗

难度级别:中级及以上 提问概率:80% 在Vue项目开发中,并不推荐使用索引做为key,以为key必须是唯一的,可以使用服务端下发的唯一ID值,也不推荐使用随机值做为key,因为如果每次渲染都监听到不一样的key,那么节点将无法复用,这与Vue节省…

中药提取物备案数据库<5000+中药提取物>

NMPA中药提取物备案数据库的建立是确保中药提取物质量安全、规范生产行为、加强监管、保障公众用药安全、促进产业发展和国际化的重要措施。 通过查询中药提取物备案信息我们能了解到中药提取物的实用备案号、药品通用名称、药品生产企业、批准文号、备案日期、备案状态、中药…

分表?分库?分库分表?实践详谈 ShardingSphere-JDBC

如果有不是很了解ShardingSphere的可以先看一下这个文章&#xff1a; 《ShardingSphere JDBC?Sharding JDBC&#xff1f;》基本小白脱坑问题 阿丹&#xff1a; 在很多开发场景下面&#xff0c;很多的技术难题都是出自于&#xff0c;大数据量级或者并发的场景下面的。这里就出…

【LeetCode刷题记录】11. 盛最多水的容器

11 盛最多水的容器 给定一个长度为 n 的整数数组 height。有 n 条垂线&#xff0c;第 i 条线的两个端点是 ( i , 0 ) (i, 0) (i,0)和 ( i , h e i g h t [ i ] ) (i, height[i]) (i,height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的…

MySQL学习路线一条龙

引言 在当前的IT行业&#xff0c;无论是校园招聘还是社会招聘&#xff0c;MySQL的重要性不言而喻。 面试过程中&#xff0c;MySQL相关的问题经常出现&#xff0c;这不仅因为它是最流行的关系型数据库之一&#xff0c;而且在日常的软件开发中&#xff0c;MySQL的应用广泛&#…

数字人直播系统是什么?AI数字人直播间搭建方法来了!

无人直播的时代&#xff0c;短视频和直播平台正在风口&#xff0c;各条赛道内也早已人满为患&#xff0c;很多线下商家都想参与其中&#xff0c;因为时间、地方、设备等限制久久不能去实行起来。所以&#xff0c;数字人直播新模式成为了线下商家的救星&#xff0c;线下商家方法…

unity_Button:单击的三种实现方式

此代码直接绑定到button上面无需其他操作 using UnityEngine; using UnityEngine.UI;public class PrintHelloOnButtonClick : MonoBehaviour {private Button button;void Start(){// 获取当前GameObject上的Button组件button GetComponent<Button>();// 添加点击事件…

探索基于WebRTC的有感录屏技术开发流程

title: 探索基于WebRTC的有感录屏技术开发流程 date: 2024/4/7 18:21:56 updated: 2024/4/7 18:21:56 tags: WebRTC录屏技术屏幕捕获有感录屏MediaStream实时传输音频录制 第一章&#xff1a;技术原理 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种开放源…

什么是FIG图片格式?如何把jpg图片转FIG格式?

一&#xff0c;什么是FIG图片格式 FIG图片格式&#xff0c;全称为Figma Image Format&#xff0c;是一种由Figma设计软件专用的图像格式。Figma是一款强大的在线协作设计工具&#xff0c;广泛应用于UI/UX设计、产品设计和图标设计等领域。 二&#xff0c;FIG图片格式的优点 …

Prometheus服务发现与监控案例-Day 02

1. 服务发现简介 prometheus采用pull方式拉取指定目标实例的监控数据&#xff0c;也就是间隔固定的周期去目标实例上抓取metrics数据&#xff0c;每一个被抓取的目标实例都需要暴露一个数据指标API接口&#xff0c;prometheus通过这个暴露的接口就可以获取到其指标数据. 这种方…

MySQL基础练习题:习题2-3

这部分主要是为了帮助大家回忆回忆MySQL的基本语法&#xff0c;数据库来自于MySQL的官方简化版&#xff0c;题目也是网上非常流行的35题。这些基础习题基本可以涵盖面试中需要现场写SQL的问题。上期帮助大家建立数据库&#xff0c;导入数据&#xff0c;接下来让我们继续练习。 …

51单片机入门_江协科技_17~18_OB记录的笔记

17. 定时器 17.1. 定时器介绍&#xff1a;51单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成&#xff0c;无需占用CPU外围IO接口&#xff1b; 定时器作用&#xff1a; &#xff08;1&#xff09;用于计时系统&#xff0c;可实现软件计时&…

【LeetCode热题100】74. 搜索二维矩阵(二分)

一.题目要求 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;…

GD32F470_US-016 模拟电压输出 双量程 模拟量 超声波测距模块 高精度

2.18 US-016电压式超声波测距传感器 US-016是市场上唯有的一款模拟量输出的超声波测距模块&#xff0c;输出的模拟电压和距离值成正比&#xff0c;可以方便的和其他系统相连&#xff0c;US-016工作稳定可靠。 US-016超声波测距模块可实现2cm~3m的非接触测距功能&#xff0c;供…

Android 9.0 framework层实现app默认全屏显示

1.前言 在9.0的系统rom产品定制化开发中,在对于第三方app全屏显示的功能需求开发中,需要默认app全屏显示,针对这一个要求,就需要在系统启动app 的过程中,在绘制app阶段就设置全屏属性,接下来就实现这个功能 效果图如下: 2.framework层实现app默认全屏显示的核心类 fram…