当前位置: 首页 > news >正文

vue3 computed方法使用详细讲解

Computed方法用于创建计算属性,它的值由其他响应式数据计算得出,并且会在依赖数据发生改变时自动更新。因为vue3兼容vue2的选项式api,所以习惯用vue2的小伙伴可以直接用vue2的方法写是没有问题的。但我这里介绍的是computed在vue3中的新语法:

内容涵盖了computed在我们开发中所有能用到的方法,另外也会在每个使用方法上附上使用情景:

1.基础写法

使用场景:我们在做项目时经常会在模板中写表达式来获取自己想要的结果,比如这样:<span>{{ author.books.length > 0 ? 'Yes' : 'No' }}</span> 但这样的表达式写入太多会造成代码臃肿,所以官方不建议在模板中写入太多的表达式操作,我们就可以使用computed方法来实现相同的功能:

<script setup>
// 1.第一步先引入computed方法:
import { ref, computed } from 'vue'const author = ref(['1','2','3'])// 2.我们定义了一个计算属性publishedBooksMessage 来接收computed()方法返回的值
const publishedBooksMessage = computed(() => {return author.length > 0 ? 'Yes' : 'No'
})
</script><template>
// 3.将publishedBooksMessage 变量写到模板中<span>{{ publishedBooksMessage }}</span>
</template>

注意:基础写法中computed()方法默认接收的是一个getter函数,返回值(也就是例子中的publishedBooksMessage 的值)为一个可读计算属性ref,也就是我们拿到值之后通常在别的地方直接引用就行,是不能做更改操作的,比如publishedBooksMessage.value++这样的操作,但基础写法在日常生活中使用的更多。所以只是可读也够用了

2. 完整写法

使用场景:我在基础写法中介绍到,基础写法返回的值只可读不可更改,所以当我们的项目涉及到需要更改的操作时,可以使用computed()的完整写法,完整写法提供getter和setter两个函数,我们在getter函数中获取该计算属性的值,在setter函数中可以对该计算属性的值进行更改操作,默认的基础写法只提供getter函数哦

<script setup>import {ref,computed } from 'vue'let booksNum = computed({ get:()=>{   return booksNum.value *10  }, set:(value)=>{   return booksNum.value = value/10 } 
})</script>

3.computed方法接收参数

使用场景:我们在computed的基础写法和完整方法中其实已经满足我们绝大部分需求了,但有些小伙伴在开发时会遇到这样类似这样的问题:在模板中使用v-for遍历循环时需要传参,computed()方法需要接收参数才能处理数据,这种情况下computed方法该如何接收参数呢?别慌,很简单,只需要在计算属性内部返回一个函数就可以了

<script setup>import {ref,computed } from 'vue'const arrList  = ref('你好','2','3')const result =computed(()=>{return (text) =>{return text+'1'}
})</script ><template><div   v-for="item in arr" ><span  v-html="result (item)"></span></div>
</template>

相关文章:

  • MUSIQ ,MANIQA,CLIP-IQA,FID是什么指标,分别是如何计算的(图像恢复领域评价指标
  • sqli-labs靶场通关保姆级教学(Get传输篇)Less-1Less-10
  • Python 10天冲刺 《元编程(Meta-programming)》
  • 《Python星球日记》第33天:前后端分离与 RESTful API
  • RPM打包格式spec文件设计原理与关键特性说明
  • 2. H264编码
  • 跨境电商合规新时代:亚马逊AHR风控系统深度解析与应对指南
  • 视觉爬虫开发:通过Puppeteer截图+CV定位动态元素坐标
  • 【iOS】源码阅读(二)——NSObject的alloc源码
  • ECMAScript 6(ES6):JavaScript 现代化的革命性升级
  • 1、Kafka与消息队列核心原理详解
  • 【技术追踪】通过潜在扩散和先验知识增强时空疾病进展模型(MICCAI-2024)
  • 如何分析java对象占用内存大小
  • 力扣118,1920题解
  • Web 页面中“加载中”交互设计:从骨架屏到乐观更新
  • linux -c程序开发
  • 第八节:图像基本操作- 图像颜色空间转换 (RGB, HSV)
  • Android Service 从 1.0 到 16 的演进史
  • 小游戏(2)扫雷游戏
  • 小芯片大战略:Chiplet技术如何重构全球半导体竞争格局?
  • 太空摄影的发展
  • 金正恩视察重要军工企业要求推进武力强化变革
  • 吴清:巴菲特即将退休,但价值投资、长期投资、理性投资、努力回报投资者等理念不会退休
  • 陕西礼泉一村民被冒名贷款40余万,法院发现涉嫌经济犯罪驳回起诉
  • 中俄合拍电影《红丝绸》将于今年9月在中国上映
  • 五一档观众最满意《水饺皇后》