首页 > 其他分享 >Chapter 05 计算属性

Chapter 05 计算属性

时间:2024-08-28 20:52:12浏览次数:7  
标签:Chapter 05 sum item num 计算 id 属性

欢迎大家订阅【Vue2+Vue3】入门到实践 专栏,开启你的 Vue 学习之旅!

文章目录


前言

Vue.js 提供了丰富的功能,帮助开发者高效地构建用户界面。本篇文章详细讲解了其计算属性的基本语法、应用场景以及性能差异。

一、基础语法

①定义
计算属性是基于其他数据属性的值计算而来的衍生数据。
它通过一个函数自动重新计算,能够简化模板中的逻辑,提高代码的可读性和可维护性。计算属性不仅仅是封装了一段代码,它还能根据依赖的数据变化进行反应式更新。

②默认写法

computed:{
  计算属性名(){
    一段代码逻辑(计算逻辑)
    return 结果
  }
}

① 声明在 computed 配置项中,一个计算属性对应一个函数
② 使用起来和普通属性一样使用 {{ 计算属性名 }}
计算属性 → 可以将一段 求值的代码 进行封装

【示例】

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    table {
      border: 1px solid #000;
      text-align: center;
      width: 240px;
    }
    th,td {
      border: 1px solid #000;
    }
    h3 {
      position: relative;
    }
  </style>
</head>
<body>

  <div id="app">
    <h3>礼物清单</h3>
    <table>
      <tr>
        <th>名字</th>
        <th>数量</th>
      </tr>
      <tr v-for="(item, index) in list" :key="item.id">
        <td>{{ item.name }}</td>
        <td>{{ item.num }}个</td>
      </tr>
    </table>

    <!-- 目标:统计求和,求得礼物总数 -->
    <p>礼物总数:{{totalCount}} 个</p>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        // 现有的数据
        list: [
          { id: 1, name: '篮球', num: 1 },
          { id: 2, name: '玩具', num: 2 },
          { id: 3, name: '铅笔', num: 5 },
        ]
      },
      computed:{
        totalCount(){
          // 基于现有的数据,编写求值逻辑
          // 计算属性函数内部可直接通过 this 访问到 app 实例

          //需求:对 this.list 数值里面的 num 进行求和→reduce
          let total = this.list.reduce((sum,item)=>sum+item.num,0)
          return total
        }
      }
    })
  </script>
</body>
</html>

运行结果:
在这里插入图片描述
【分析】

let total = this.list.reduce((sum, item) => sum + item.num, 0);

reduce() :数组的一个方法,它用于对数组中的每个元素执行一个函数,将其汇总为一个单一的结果。reduce 方法接受两个参数:

  • 参数1:一个回调函数。
  • 参数2:一个初始值,通常情况下是 0。

(sum, item) => sum + item.num:一个箭头函数,作为 reduce 的第一个参数。我们可以把该函数拆分成两个部分:

  • sum:表示累加器,它是上一次调用函数返回的值。
  • item:表示当前处理的数组元素。
  • 函数内部的逻辑 sum + item.num:将当前的累加器 sum 和当前对象的 num 属性相加,并返回这个结果。这个返回值会成为下一次调用的 sum 值。
  • 0 :表示累加的初始值是 0。第一次调用时,sum 的初始值为 0。

该代码遍历 this.list 数组中的每一个项(item),对于每一个 item,提取它的 num 值,并不断地将这些 num 值相加到 sum 中,最终,返回所有 num 值的总和并赋给 total 变量。
执行过程如下:

第一步:sum = 0, item = { id: 1, name: '篮球', num: 1 } → 0 + 1 = 1
第二步:sum = 1, item = { id: 2, name: '玩具', num: 2 } → 1 + 2 = 3
第三步:sum = 3, item = { id: 3, name: '铅笔', num: 5 } → 3 + 5 = 8

二、计算属性vs方法

特性计算属性 (computed)方法 (methods)
定义基于现有的数据,计算出新属性提供一个可调用的方法,以处理业务逻辑
作用封装一段数据处理逻辑,计算并返回结果定义这一实例的行为,用于处理业务逻辑
声明位置computed 配置项中methods 配置项中
访问方式作为属性,直接使用{{ 计算属性名 }}this.计算属性名作为方法,需要调用{{ 方法名() }}this.方法名()
自动依赖追踪是(只有在依赖的数据变化时才会重新计算)否(每次调用都会执行函数,无论依赖的数据是否变化)
缓存计算结果会被缓存,性能更高不会缓存,每次调用都会重新计算
返回值直接返回计算结果直接返回计算结果
特定场景适用性高频更新、需要对依赖数据变化反应的情况适合需要执行不定逻辑的情况
可写性默认是只读的,如果需要修改需完整定义 getter 和 setter可以在方法中进行参数传递和逻辑处理

缓存特性
计算属性会缓存计算结果,后续使用时会直接读取缓存。当其依赖的响应式数据发生变化时,计算属性会进行重新计算并更新缓存。即使模板频繁渲染,计算属性也能够避免重复计算,从而大大提升性能。

【示例】
①computed计算属性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    table {
      border: 1px solid #000;
      text-align: center;
      width: 300px;
    }
    th,td {
      border: 1px solid #000;
    }
    h3 {
      position: relative;
    }
    span {
      position: absolute;
      left: 145px;
      top: -4px;
      width: 16px;
      height: 16px;
      color: white;
      font-size: 12px;
      text-align: center;
      border-radius: 50%;
      background-color: #e63f32;
    }
  </style>
</head>
<body>

  <div id="app">
    <h3>礼物清单

标签:Chapter,05,sum,item,num,计算,id,属性
From: https://blog.csdn.net/2302_80253507/article/details/141641147

相关文章

  • 【北京迅为】龙芯iTOP-LS2K0500开发板快速启动手册-第3章 Windows安装串口终端
      LS2K0500采用龙芯2K0500处理器,基于龙芯自主指令系统(LoongArch)架构,片内集成64位LA264处理器核。实现ACPI、DVFS/DPM动态电源功耗管理等低功耗技术,支持多种电源级别和唤醒方式,可根据具体应用场景对芯片部分功能和高速接口进行动态时钟、电源开关控制,满足工控、网......
  • 代码随想录算法day24 | 贪心算法part02 | 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳
    122.买卖股票的最佳时机II本题解法很巧妙,本题大家可以先自己思考一下然后再看题解,会有惊喜!力扣题目链接(opensnewwindow)给定一个数组,它的第 i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次......
  • sky-take-out chapter 5
    微信登录商品浏览HttpClient(1)介绍就是一个客户端编程工具包,更直白点就是我们可以在java程序中通过HttpClient这个工具包来构造http请求,并且可以来发送http请求;要使用httpclient就需要再java程序中导入maven坐标。核心API:HttpClient实际上是一个接口,使用它可以来发送一个h......
  • perspective和transform系列属性
    在CSS3中,确实有一些属性可以用来创建3D效果和调整景深。主要的属性包括perspective和transform系列属性。下面分别介绍这些属性的使用方法和使用场景。perspectiveperspective属性用于为3D空间中的元素设置景深。它决定了观察者与元素之间的距离,从而影响3D变换的透视效果。语法......
  • 005 交换网络中的STP与RSTP协议
    引言生成树协议(STP)和快速生成树协议(RSTP)是交换网络中防止环路的重要机制。本篇博文将深入介绍STP和RSTP的工作原理及配置方法,确保你的网络稳定高效运行。1.什么是网络环路?网络环路是交换网络中可能发生的一种严重问题,会导致广播风暴、MAC地址表震荡等问题。环路发生时,数......
  • [1051] What is RESTful API?
    ref:WhatisRESTfulAPI?WhatisRESTfulAPI?RESTfulAPIisaninterfacethattwocomputersystemsusetoexchangeinformationsecurelyovertheinternet.Mostbusinessapplicationshavetocommunicatewithotherinternalandthird-partyapplications......
  • AtCoder Beginner Contest 052
    A-TwoRectangles#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr); intA,B,C,D; cin>>A>>B>>C>>D; cout<<max(A*B,C*D); ......
  • [1050] Website endpoints in AWS
    ref:WebsiteendpointsWebsiteendpointexamplesThefollowingexamplesshowhowyoucanaccessanAmazonS3bucketthatisconfiguredasastaticwebsite.Example—RequestinganobjectattherootlevelTorequestaspecificobjectthatisstored......
  • 简单的qml 属性浏览器
    简单的qml属性浏览器Githubqt-quick-qml-property-browser有用的话点个star基于quick2TableView实现,主要思想是根据modeltyperole的数据确认该项的类型,使用Loader分类别加载对应类型的组件(string、int、double、bool和enum)。我知道在Qt.labs.qmlmodels中有更好的......
  • C# 类(二)——成员:属性、方法、事件
    目录1、类的成员2、字段(field)3、属性(property)4、方法(method)5、事件(event)1、类的成员类具有表示其数据和行为的成员。类的成员包括在类中声明的所有成员,以及在该类的继承层次结构中的所有类中声明的所有成员(构造函数和析构函数除外)。基类中的私有成员被继......