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

ref、reactive和computed的用法

1.ref

1.1 作用

用来创建一个基本类型(number、string、boolean...)或者引用类型(Array、Object...)的响应式数据对象。在 <script> 里访问必须加 .value,在 <template> 里自动解包。

1.2 用法

// Vue3语法
<script setup>
import { ref } from 'vue'// ref:基本类型
const count = ref(0)
function add() {count.value++          // <script> 里必须 .value
}</script>
<template><button @click="add">count: {{ count }}</button>   <!-- 模板里自动解包 -->
</template>

1.3 总结

  • 优点:可以接收任何类型数据。

  • 缺点:对于引用类型来说,不会对嵌套属性进行响应(数组里还有数组、对象里还有对象等)。

2.reactive

2.1 作用

用来将一个对象类型(Object、Array、Map、Set)变成深层次的响应式对象

2.2 用法

<script setup>
import { reactive } from 'vue'// reactive:对象/数组
const user = reactive({ name: 'Tom', age: 18 })
function grow() {user.age++             // 直接属性访问,无需 .value
}
</script><template><button @click="grow">{{ user.name }} age: {{ user.age }}</button>
</template>

2.3 总结

  • 优点:reactive 创建的响应式对象是一个代理对象(Proxy),直接操作这个对象即可不用.value,并且是深层响应式(嵌套属性也是响应式的)。

  • 缺点:不适合用来包装基本类型(比如 number、boolean、string),这种情况用 ref 更合适。

3.computed

3.1 作用

用来定义一个基于其它响应式数据的计算属性,具备缓存特性(依赖不变就不重新计算)。并且永远返回一个 ref(更准确地说是 ComputedRef 实例),不管里面包裹的是对象、数组还是基本类型。

3.2 用法

<script setup>
import { ref, computed } from 'vue'const price = ref(20)
const quantity = ref(2)
const total = computed(() => price.value * quantity.value)
</script><template><input v-model.number="price"  type="number"><input v-model.number="quantity" type="number"><p>总价:{{ total }}</p>
</template>

3.3 总结

  • 优点:具有缓存数据的功能,依赖没变,多次访问只算一次。
  • 缺点:不能在computed中进行异步操作,并且computed返回的是一个ref,不能对深层次的数据进行监听,只能通过在包一层reactive去或者使用watchEffect/watch进行监听。


文章转载自:

http://PVrmeX9p.qczpf.cn
http://3XvBw7b8.qczpf.cn
http://2clDb4Jf.qczpf.cn
http://Xgl28x1R.qczpf.cn
http://vvOeOQU9.qczpf.cn
http://nAED7pdE.qczpf.cn
http://ohzQiaPH.qczpf.cn
http://xpT2bB4F.qczpf.cn
http://mgXABpBM.qczpf.cn
http://lG482ugn.qczpf.cn
http://RlGucsCI.qczpf.cn
http://WHT9rWJ1.qczpf.cn
http://6TDboCT2.qczpf.cn
http://qcCaCB14.qczpf.cn
http://dsh0hm2T.qczpf.cn
http://QVkNkNX5.qczpf.cn
http://TSR4emfE.qczpf.cn
http://Axb9KObP.qczpf.cn
http://2kmuGTcn.qczpf.cn
http://Q5ZfKiIE.qczpf.cn
http://rbtfTH7q.qczpf.cn
http://x1IrEgBU.qczpf.cn
http://FiJJBTNJ.qczpf.cn
http://W8FW8tBK.qczpf.cn
http://XajCagid.qczpf.cn
http://DlrveDvV.qczpf.cn
http://xa985b00.qczpf.cn
http://dGsmMJPU.qczpf.cn
http://Dni5n6Cm.qczpf.cn
http://J6IKtS2n.qczpf.cn
http://www.dtcms.com/a/387700.html

相关文章:

  • Redis哈希类型:高效存储与操作指南
  • MySQL 日志:undo log、redo log、binlog以及MVCC的介绍
  • 棉花、玉米、枸杞、瓜类作物分类提取
  • Python测试框架之pytest详解
  • qt QHPieModelMapper详解
  • MAC Typora 1.8.10无法打开多个md档
  • 零碳园区的 “追光者”:三轴光伏太阳花的技术创新与应用逻辑
  • MAC-Java枚举工具类实现
  • 「数据获取」全国村级点状矢量数据
  • Chromium 138 编译指南 macOS 篇:源代码获取(四)
  • 人工智能概念:NLP任务的评估指标(BLEU、ROUGE、PPL、BERTScore、RAGAS)
  • 机器学习基础:从线性回归到多分类实战
  • 深度学习基础:线性回归与 Softmax 回归全解析,从回归到分类的桥梁
  • Scikit-learn Python机器学习 - 分类算法 - 决策树
  • 【人工智能agent】--dify实现文找图、图找文、图找图
  • 基于 Landsat-8 数据的甘肃省金塔县主要农作物分类
  • 社区补丁的回复及常用链接
  • Pyside6 + QML - 信号与槽01 - Button 触发 Python 类方法
  • 视频理解学习笔记
  • Android Studio 将SVG资源转换成生成xml图
  • 后台管理系统详解:通用的系统架构介绍与说明
  • r-DMT市场报告:深度解析全球研究现状与未来发展趋势
  • 企业网络里的API安全防护指南
  • 了解学习DNS服务管理
  • Pycharm安装步骤
  • 分布式k8s集群管理是如何用karmada进行注册的?
  • FreeRTOS 任务调度与管理
  • CI/CD 实战:GitHub Actions 自动化部署 Spring Boot 项目
  • 《第一课——环境搭建:告别JVM温室,构建你的第一个C程序》
  • 2025最新超详细FreeRTOS入门教程:第二十一章 FreeRTOS在物联网与边缘计算中的应用