Vue 3 第七章:computed计算属性

2023-11-08

1. Vue3中的computed函数

1.1. 什么是computed?

computed属性是Vue3中的一个响应式计算属性,它可以根据其他响应式数据的变化而自动更新其自身的值。computed属性可以接收一个计算函数,并在计算函数中使用其他响应式数据的值进行计算。当任何一个参与计算的响应式数据发生变化时,computed属性会自动重新计算其值,并触发相应的依赖更新。

1.2. 如何定义computed?

在Vue3中,你可以通过computed函数来定义一个计算属性。computed函数接收一个计算函数作为参数,并返回一个响应式的ref对象。

下面是一个使用computed函数形式用法的例子:

import { computed, reactive, ref } from 'vue'

const state = reactive({
  count: 0
})

const doubleCount = computed(() => {
  return state.count * 2
})

console.log(doubleCount.value) // 输出:0

state.count = 1

console.log(doubleCount.value) // 输出:2

在上面的例子中,我们使用computed函数定义了一个计算属性doubleCount,它的值是state.count的两倍。我们可以通过doubleCount.value来访问计算属性的值,并且当state.count的值发生变化时,doubleCount的值也会自动更新。

下面是一个使用computed对象形式用法的例子:

import { computed, reactive } from 'vue'

const state = reactive({
  count: 0
})

const doubleCount = computed({
  get() {
    return state.count * 2
  },
  set(value) {
    state.count = value / 2
  }
})

console.log(doubleCount.value) // 输出:0

doubleCount.value = 6

console.log(state.count) // 输出:3
console.log(doubleCount.value) // 输出:6

1.3. computed函数的使用场景

computed属性通常用于处理需要根据其他响应式数据计算得出的值的情况。下面是一些computed属性的使用场景:

1.3.1. 过滤和排序

当我们需要根据其他响应式数据进行数据过滤和排序时,可以使用computed属性来计算得出过滤和排序后的结果。例如:

import { computed, reactive } from 'vue'

const state = reactive({
  todos: [
    { id: 1, text: '学习Vue3', done: false },
    { id: 2, text: '学习React', done: false },
    { id: 3, text: '学习Angular', done: true }
  ],
  filter: 'all'
})

const filteredTodos = computed(() => {
  if (state.filter === 'all') {
    return state.todos
  } else if (state.filter === 'active') {
    return state.todos.filter(todo => !todo.done)
  } else if (state.filter === 'completed') {
    return state.todos.filter(todo => todo.done)
  }
})

console.log(filteredTodos.value) // 输出:[{ id: 1, text: '学习Vue3', done: false }, { id: 2, text: '学习React', done: false }, { id: 3, text: '学习Angular', done: true }]

state.filter = 'active'

console.log(filteredTodos.value) // 输出:[{ id: 1, text: '学习Vue3', done: false }, { id: 2, text: '学习React', done: false }]

在上面的例子中,我们使用computed函数定义了一个计算属性filteredTodos,它根据state.todosstate.filter的值进行过滤,并返回过滤后的结果。当state.filter的值发生变化时,filteredTodos的值也会自动更新。

1.3.1. 数组计算

当我们需要对一个数组进行计算时,可以使用computed属性来计算得出数组的值。例如:

import { computed, reactive } from 'vue'

const state = reactive({
  todos: [
    { id: 1, text: '学习Vue3', done: false },
    { id: 2, text: '学习React', done: false },
    { id: 3, text: '学习Angular', done: true }
  ]
})

const totalTodos = computed(() => {
  return state.todos.length
})

const completedTodos = computed(() => {
  return state.todos.filter(todo => todo.done).length
})

console.log(totalTodos.value) // 输出:3
console.log(completedTodos.value) // 输出:1

在上面的例子中,我们使用computed函数定义了两个计算属性totalTodoscompletedTodos,它们分别计算了state.todos数组的总长度和已完成的数量。当state.todos数组的值发生变化时,totalTodoscompletedTodos的值也会自动更新。

2. computed函数的原理

在Vue3中,computed属性的原理是使用了一个getter函数和一个setter函数来实现。当我们访问计算属性的值时,会调用getter函数进行计算,并将计算结果缓存起来。当参与计算的响应式数据发生变化时,会触发依赖更新,并自动调用getter函数重新计算计算属性的值。当我们修改计算属性的值时,会调用setter函数进行更新。

总结

computed属性是Vue3中的一个响应式计算属性,它可以根据其他响应式数据的变化而自动更新其自身的值。computed属性通常用于处理需要根据其他响应式数据计算得出的值的情况,例如过滤和排序、数组计算等。computed属性的原理是使用了一个getter函数和一个setter函数来实现,并将计算结果缓存起来,以提高性能和减少计算次数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue 3 第七章:computed计算属性 的相关文章

随机推荐

  • 【论文研读】【医学图像】【R2UNet】Recurrent residual U-Net for medical image segmentation

    R2UNet Recurrent residual U Net for medical image segmentation Abstract 1 Introduction 2 Related Works 3 RU Net and R2U
  • jieba自定义分词规则与多进程切词

    当存在某些自定义的专业名称或长词时 jieba有可能会当成多个词 但其实是一个词 自定义的方法如下 原始的jieba效果 import jieba if name main sentence 学习python与人工智能有益身体健康 ret
  • ubuntu常用命令(转载)

    ls 列出当前目录文件 不包括隐含文件 ls a 列出当前目录文件 包括隐含文件 ls l 列出当前目录下文件的详细信息 cd 回当前目录的上一级目录 cd 回上一次所在的目录 cd 或 cd 回当前用户的宿主目录 mkdir 目录名 创建
  • ide运行报错“Command line is too long”解决办法

    有时运行程序时 ide会报如下错 如何解决呢 其实提示已经告诉你解决办法了 点击图中的蓝色超链接 JAR MAINIFEST 或 CLASSPATH FILE 都能解决问题 这是因为命名的方法名太长了才会报这个错 方法2 如果没有弹窗 也可
  • 查看Linux下rpm文件安装到哪个路径

    命令 root localhost rpm qpl xxx rpm more
  • 用户数据报UDP

    UDP概述 UDP 只在 IP 的数据报服务之上增加了很少一点的功能 即端口的功能和差错检测的功能 UDP 的主要特点 UDP 是无连接的 不需要建立连接 直接发送数据 发送完以后也不需要释放连接 UDP 使用尽最大努力交付 即不保证可靠交
  • 使用 MATLAB 绘制爱心:帮助你成功表白

    作者简介 人工智能专业本科在读 喜欢计算机与编程 写博客记录自己的学习历程 个人主页 小嗷犬的个人主页 个人网站 小嗷犬的技术小站 个人信条 为天地立心 为生民立命 为往圣继绝学 为万世开太平 本文目录 MATLAB 绘制爱心 方法一 方法
  • C++中string的size与length的区别

    在C 的string类中 有两种函数 length和size 他们的作用都是返回字符串的长度 那么 问题来了 他们两者有什么区别 为了钻研 我们要先找到他们两者的源代码 让我们先找到length的源代码 首先 我们随便定义一个字符串 并调用
  • hualinux dj3 2.4:drf普通视图generics及例子

    目录 一 关于通用视图generics 1 1 基于类的视图 1 2 关于通用视图 1 2 1 介绍 1 2 2 属性 1 2 3 方法 1 2 4 Mixins 1 2 5 具体的通用视图 1 2 6 其它 二 drf通用视图generi
  • 内核调试手段

    1 内核调试配置选项 内核拥有多项用于调试的功能 但是这些功能会造成额外的输出并导致性能下降 因此 内核通常都是禁止掉调试功能 内核调试相关的配置项主要集中在内核配置菜单 Kernel hacking 中 在使用下面的调试手段时 先确保内核
  • 如何修改unity项目名称

    在Unity中 修改项目名称需要对一些文件和设置进行修改 以下是修改Unity项目名称的步骤 在Unity编辑器中 选择项目文件夹 Project 面板中的 Assets 然后点击右键 在弹出菜单中选择 Show in Explorer 在
  • 项目管理利器—maven

    一 简介 maven是优秀的项目管理和构建工具 能让我们更为方便的来管理和构建项目 从最基础的环境配置 到maven核心知识点的应用 使用maven来构建和管理Java项目 Maven是基于项目对象模型 POM 可以通过一小段描述信息来管理
  • JavaScript数组中筛选相同的元素组成新数组

    var college type 2 lastName 孙策 type 1 lastName 后裔 type 3 lastName 阿木木 type 3 lastName 亚索 type 1 lastName 剑魔 type 1 lastN
  • 写给我的2015—开启工作新旅程

    前沿 2015年的总结相比2014年来的晚了许多 原因一方面是今年呀的发现CSDN竟然没有了前两年写年终的活动 另一方面嘛还是自己太懒散了 一直恍恍惚惚的没有下手来总结 今天 在这小年夜里 ps 外面下完雪挺冷的 独自一个人坐在办公桌前 静
  • 实心球体内部电势计算公式_均匀带电球体中心点电势怎么求

    展开全部 公式 q 其中 为电势能 q为电荷量 为电势 即 q 均匀带电球内的电场分布和距离球心的距32313133353236313431303231363533e4b893e5b19e31333431363565离r成正比 解析 由于正
  • linux文件权限查看及修改-chmod ------入门的一些常识

    查看linux文件的权限 ls l 文件名称ULUitugULUitug查看linux文件夹的权限 ls ld 文件夹名称 所在目录 ULUitugULUitug修改文件及文件夹权限 ULUitugULUitugsudo chmod 代表类
  • 【软件工程】内聚

    概念 是指一个模块内部个成分之间相互关联程度的度量 也就是说 凝聚是对模块内各处理动作组合强度的一种度量 很显然 一个模块的内聚越大越好 偶然凝聚 一个模块内的各处理元素之间没有任何联系 只是偶然地被凑到一起 这种模块也称为巧合内聚 内聚程
  • MySQL数据库引擎InnoDB和MyISAM的区别?

    数据库引擎InnoDB和MyISAM的区别 1 MyISAM不支持事务 InnoDB支持事务 2 MyISAM支持全文索引 InnoDB在MySQL5 6之前不支持 3 MyISAM不支持外键 InnoDB支持外键 4 MyISAM只支持表
  • STM32之flash的读写

    本文内容 本实验主要介绍Flash地址空间的数据读取 一 创建STM32CUBEMX工程 芯片选择F103C8 配置定时器 打开外部时钟 配置时钟 配置PC13为output对应板子上的LED 设置堆栈大小为4K 导出 二 KEIL下的配置
  • Vue 3 第七章:computed计算属性

    文章目录 1 Vue3中的computed函数 1 1 什么是computed 1 2 如何定义computed 1 3 computed函数的使用场景 1 3 1 过滤和排序 1 3 1 数组计算 2 computed函数的原理 总结 1