vue保姆级教程----深入了解 Vue3计算属性

news2024/11/28 18:59:52

📢 鸿蒙专栏:想学鸿蒙的,冲

📢 C语言专栏:想学C语言的,冲

📢 VUE专栏:想学VUE的,冲这里

📢 CSS专栏:想学CSS的,冲这里

📢 Krpano专栏:想学VUE的,冲这里

🔔 上述专栏,都在不定期持续更新中!!!!!!!!!!!!!

目录

✨ 前言

计算属性基础

与方法的区别

计算属性获取器与设置器

在模板中使用

监听依赖变化

计算属性的实现原理

设置setter的原理

响应式依赖

✨ 结语


 

✨ 前言

        计算属性是Vue中非常重要也很实用的一个功能。它可以帮助我们将复杂的计算逻辑移出模板,使组件更加清晰可维护。在前端开发中,合理地使用计算属性可以大大提高代码质量。

        本文将从起源、工作原理和应用场景三个方面深入探讨Vue中的计算属性,希望可以帮助大家更好地理解和使用这个功能。

        首先,我们会了解计算属性的起源,包括它与Methods和Watch的区别,以及出现的背景。

        然后,会通过一个示例计算属性的代码,对其工作原理做详细的剖析,分析依赖追踪、缓存等机制的实现。这对理解计算属性的运行规则非常重要。

        最后,我们将给出计算属性的常见应用场景,探讨在何时使用计算属性可以使代码更优雅。不同的场景使用计算属性也有不同的技巧。

        本文内容涵盖计算属性的方方面面,可以作为学习参考,也可供日常开发时查阅。读者在通读本文后,将对这一核心概念有深入的理解,能够灵活地在项目中使用。让我们开始了解计算属性的奥秘吧!

计算属性基础

计算属性的基本语法是:

computed: {
  属性名() {
    // 计算逻辑
    return 计算结果
  }
}

计算属性会根据依赖进行缓存,如果多次访问计算属性,但依赖值未变化,则直接返回缓存结果,不会再次执行函数。

与方法的区别

计算属性 vs 方法:

  • 计算属性是基于依赖进行缓存的,方法每次重新渲染都会执行。
  • 计算属性必须返回一个值,方法可以没有返回值。
  • 计算属性可以通过属性访问,方法必须通过调用的方式。

计算属性获取器与设置器

计算属性可以提供 getter 和 setter :

fullName: {
  get() {
    return this.firstName + ' ' + this.lastName
  },
  set(newValue) {
    // ...
  }
}

这样就可以像数据属性一样使用计算属性了。

在模板中使用

计算属性可以直接在模板中使用:

<p>{{ fullName }}</p>

它会自动调用计算属性的 getter 方法。

监听依赖变化

使用 computed() 创建计算属性时,可以传递一个对象来监听依赖项变化:

computed: {
  fullName() {
    // ...
  },
  computed: computed({
    get() {
      // ...
    },
    set() {
      // ...  
    }
  })
}

这样可以直接在计算属性内部执行副作用逻辑。

计算属性的实现原理

计算属性本质上是利用了闭包的缓存特性来实现的。可以从三个方面来分析:

  1. 初始化阶段
  • 每个组件实例在初始化时,会通过调用evaluate方法对计算属性求值,这时会调用计算属性函数,并将结果缓存。
  1. 依赖追踪
  • 计算属性内部的响应式数据如何被追踪?通过effecttrack实现。
  • 效果函数会记录所依赖的属性,当依赖改变时触发重新求值。
  1. 缓存
  • 计算属性函数通过闭包缓存上次结果,如果依赖未变化,则直接返回缓存值。
  • 这避免了每次重新渲染都要执行函数。

设置setter的原理

  • 计算属性的setter会触发组件的trigger方法,通知依赖进行更新。
  • 这样就可以像数据属性一样使用计算属性了。

响应式依赖

  • 计算属性内部所依赖的响应式数据,是通过reactiveref创建的。
  • 它们会转换成代理对象,用来追踪依赖和触发更新。

✨ 结语

        以上就是计算属性在 Vue3 中的常见用法,它可以让模板更清晰,也可以避免复杂的逻辑直接写在模板中。正确使用计算属性可以提高组件的可维护性。

        计算属性看起来简单,但其原理比较复杂,涉及响应式、闭包、代理等知识。需要对其内部运行机制有深入理解,才能更好地在Vue中使用它。

        我们改日再会!

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

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

相关文章

引导过程和服务

宏内核(monolithic kernel)&#xff1a;又称单内核和强内核&#xff0c;Unix&#xff0c;Linux把所有系统服务都放到内核里&#xff0c;所有功能集成于同一个程序&#xff0c;分层实现不同功能&#xff0c;系统庞大复杂&#xff0c;Linux其实在单内核内核实现了模块化&#xff…

ROS 系列学习教程(总目录)

ROSLearning 一、ROS概览 1.1 ROS简介 To be continued… 1.2 ROS安装 Ubuntu 安装 ROS 详细教程&#xff08;以最后一个ROS1版本Noetic为例&#xff09; 1.3 ROS Hello World ROS创建工作空间添加包并编译 ROS Hello World 1.4 ROS架构 ROS架构&#xff1a;文件系统 …

three.js相机按照指定路线在建筑模型中漫游(支持开始,暂停)

three.js相机按照指定路线在模型中漫游&#xff08;支持开始&#xff0c;暂停&#xff09; 关键点 相机运动曲线 // 相机路线 const points [new THREE.Vector3(0, 40, 300),new THREE.Vector3(50, 40, 300),new THREE.Vector3(50, 40, 50),new THREE.Vector3(150, 40, 50),…

在js中foreach、for in和for of 的区别是什么

for in 是一种在 JavaScript 中遍历对象属性的方法&#xff0c;它可以遍历一个对象的所有可枚举属性&#xff0c;但不能遍历数组。 for of 是一种在 JavaScript 中遍历可迭代对象的方法&#xff0c;它可以遍历数组、字符串、Set、Map 等可迭代对象。 foreach 是 JavaScript 中…

华清远见作业第二十一天——IO(第四天)

思维导图&#xff1a; 创建出三个进程完成两个文件之间拷贝工作&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程回收子进程的资源。 代码&#xff1a; #include<myhead.h> int main(int argc, const char *argv[]) {if(argc!3)…

GROUP_CONCAT报错解决

有如下表 其中awardee和awardee_unit都是保存的json类型的字符串, awardee是多个人员id, awardee_unit是部门的全路径 查询时要注意转换 需要将name拼接起来合并成一行,直接 GROUP_CONCAT 会报错 百度的大部分答案是修改数据库配置去掉严格模式,如果不方便修改数据库可以这样…

kubernetes(三)

文章目录 1. k8s弹性伸缩1.1 安装heapster监控1.2 弹性伸缩使用和验证 2. 持久化存储2.1 emptyDir 1. k8s弹性伸缩 k8s弹性伸缩&#xff0c;需要附加插件heapster 1.1 安装heapster监控 使用heapster(低版本)可以监控pod压力大不大 使用hpa调节pod数量&#xff0c;自动扩容或…

应用案例——音箱系统的芯片组成

人类的语言交流是人类交互的主要方式&#xff0c;从键盘&#xff0c;鼠标&#xff0c;触屏控制&#xff0c;人机交互的本质始终没有改变&#xff0c;无法完成对话式的交流&#xff0c;而语音交互的出现打破了这一现状&#xff0c;它可以解放双手&#xff0c;甚至解放双眼&#…

双碳目标---碳储量、碳收支、碳循环

以全球变暖为主要特征的气候变化已成为全球性环境问题&#xff0c;对全球可持续发展带来严峻挑战。2015年多国在《巴黎协定》上明确提出缔约方应尽快实现碳达峰和碳中和目标。2019年第49届 IPCC全会明确增加了基于卫星遥感的排放清单校验方法。随着碳中和目标以及全球碳盘点的现…

C练习——定期存取并行

题目&#xff1a;假设银行一年整存零取的月息为1.875%&#xff0c;现在某人手头有一笔钱&#xff0c;他打算在今后5年 中&#xff0c;每年年底取出1000元作为孩子来年的教育金&#xff0c;到第5年孩子毕业时刚好取完这笔钱&#xff0c;请编 程计算第1年年初时他应存入银行多少钱…

基于EMD-SpEn(样本熵)联合小波阈值去噪

代码原理 基于 EMD-SpEn&#xff08;样本熵&#xff09;联合小波阈值去噪方法是一种用于信号降噪的信号处理方法&#xff0c;它结合了经验模态分解 (EMD)、样本熵 (SpEn) 和小波阈值处理技术。 首先&#xff0c;使用 EMD 将原始信号分解为一组称为经验模态函数 (IMFs) 的信号…

基于SpringBoot的在线考试系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把在线考试管理与现在网络相结合&#xff0c;利用java技术建设在线考试系统&#xff0c;实现在线考试的信息化管理。则对于进一步提高在线考试管理发展&#xff0c;丰富在线考试管理经验能起到不少的促进作用。 在线考试系统能够通…

未来已来,Ai原生应用与人高度结合!学习就在现在?

原生应用&#xff1a;OpenAI™ChatGPT、Baidu.Inc™文心一言 也可以体验CSDN的INSCODE AI&#xff0c;集成多个国内GPT内容。 文章目录 前言----编程语言的未来&#xff1f;一、编程语言的教育1.1 学校所见所闻1.2 开启我们的Ai行程~io&#xff01;1.3 Ai结果评论 二、Ai编程教…

Linux-进程间通信_管道

项目场景&#xff1a; 须熟知文件管理和进程方面的基础知识 通过Xshell和VScode 相互进行远程开发&#xff0c;学习进程间通信的其中一种方式——管道。 问题描述 依照我们曾经所学的知识&#xff0c;我们仅仅只能在单个进程中进行数据的交互&#xff0c;但是在实际应用中&a…

树莓派外设开发综述及WiringPi库安装

树莓派常用的接口 IO&#xff1a; input&#xff1a; output&#xff1a; PWM&#xff1a; IIC spi uart WiringPi库 树莓派一个非常重要的 WiringPi库&#xff08;Linux下 动态库 ”.so“ 静态库”.a"&#xff09; &#xff08;是一个特定平台&#xff0c;特…

【Jasypt】SpringBoot配置文件加密

1、加密介绍 在yml配置文件中会存在一些敏感数据&#xff0c;比如用户名&#xff0c;密码&#xff0c;第三方应用的密钥等等。这些信息是以明文的形式出现在文件中&#xff0c;存在较大安全隐患。Jasypt&#xff08;Java Simplified Encryption&#xff09;是一个Java库&#…

秋招复习之数组与链表

目录 前言 1 数组 初始化数组&#xff1a; 访问元素 插入元素 删除元素 遍历数组&#xff1a; 查找元素 扩容数组&#xff1a; 数组的优点与局限性 2 链表 初始化链表 插入节点 删除节点 访问节点 查找节点 数组 vs. 链表 常见链表类型 3 列表 初始化列表 访问元素 插入与删…

Vue 单文件组件的基础入门指南

本文是我2年前做的一个学习小demo&#xff0c;在这里分享一下 希望对想要学习Vue的小伙伴能有一丢丢的小帮助~_~ 1 Vue CLI Vue CLI (opens new window)是一个基于Vue.js进行快速开发的完整系统。 这里我使用 Vue CLI 生成了一个Vue项目&#xff0c;命令为&#xff1a;vue cr…

高效工具汇总,让学习和办公飞起来

目录 1、寻找论文&#xff0c;效率很高2、学习各类编程的地方 1、寻找论文&#xff0c;效率很高 AMiner&#xff0c;由清华大学计算机科学与技术系的唐杰教授团队开发的一个显著的学术搜索和挖掘系统。系统提供了一整套功能以协助学术研究&#xff0c;包括研究人员档案、专家搜…

JAVA的引用与C++的指针有什么区别

JAVA的引用与C的指针有什么区别 1. Java值类型与引用类型1.1 变量初始化1.2 变量赋值1.3 函数传参 2. Java数据存储方式2.1 Java局部变量&&Java方法参数2.2 Java数组类型引用和对象2.3 String类型数据 3. Java引用类型3.1 强引用3.2 软引用3.3 弱引用3.4 虚引用 4. JAV…