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

Vue3.0组合式API:使用reactive()、ref()创建响应式代理对象

1、reactive() 方法

reactive() 方法用于将定义的 JavaScript 对象转换为响应式对象。

使用方法:

<script setup>
//第一步:导入函数
import { reactive } from 'vue';//第二步:创建响应式对象
const data = reactive(对象类型的数据);
</script>

【实例】使用 reactive() 方法,创建一个响应式对象,并实现修改响应式对象的值。

<template><fieldset><legend>组件</legend><p>用户名称:{{ userInfo.userName }}</p><p>用户年龄:{{ userInfo.age }}</p><p>博客信息:{{ userInfo.blogName }}</p><p>博客地址:{{ userInfo.blogUrl }}</p><button @click="updateAge">修改年龄</button></fieldset>
</template><script setup>
//第一步:导入函数
import { reactive } from 'vue';//第二步:创建响应式对象,参数为对象
const userInfo = reactive({userName: 'pan_junbiao的博客',age: 0,blogName: '您好,欢迎访问 pan_junbiao的博客',blogUrl: 'https://blog.csdn.net/pan_junbiao'
});//修改年龄方法
function updateAge() {userInfo.age = 36;
}</script>

执行结果:

2、ref() 方法

reactive() 方法可以为一个 JavaScript 对象创建响应式代理,如果需要对象某个基本数据类型(如:数字、字符串)的数据创建响应式代理对象,可以通过 ref() 方法实现。该方法接收一个原始值作为参数(也支持对象类型),返回一个响应式的对象,该对象只有一个 value 属性值指向内部值。

使用方法:

<script setup>
//第一步:导入函数
import { ref } from 'vue';//第二步:创建响应式对象
const data = ref(基本数据类型 或 对象类型);
</script><template><!-- 第三步:使用响应式对象 --><p>{{ data }}</p>
</template>

【实例】使用 ref() 方法,创建一个响应式对象,并实现一个计数器功能。

<template><fieldset><legend>组件</legend><!-- 第三步:使用响应式对象 --><p>计数结果:{{ count }}</p><button @click="counter">计数器</button></fieldset>
</template><script setup>
//第一步:导入函数
import { ref } from 'vue';//第二步:创建响应式对象
const count = ref(0);// 增加计数的方法
function counter() {//注意:使用响应式对象的.value属性,获取内部值count.value++;
}
</script>

 执行结果:

说明:

如果将 ref() 方法创建的响应式代理对象作为属性返回,那么在模板中访问时不需要添加 .value 属性。

3、reactive 与 ref 的区别

reactive() 方法与 ref() 方法都可以用于创建响应式代理对象。但它们之间存在着以下几点区别:

  1. reactive() 方法的参数,必须是对象类型。
  2. ref() 方法参数可以是基本数据类型,也可以是对象类型。
  3. ref() 方法创建的响应式对象,必须通过 .value 属性访问。
  4. ref() 方法的内部实现依赖于 reactive() 方法。

在实际的项目开发中,推荐使用 ref() 方法,因为更加灵活。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java 原生API实现TCP客户端:发送和接收GBK编码消息
  • 【AI赋能医学】基于深度学习和HRV特征的多类别心电图分类
  • 窗口框架frame(HTML前端)
  • 【Vue】- ref获取DOM元素和购物车案例分析
  • 情感识别系统源码分享
  • 源码编译llama.cpp 、ggml 后端启用自定义BLAS加速
  • python实现冒泡排序的算法
  • 分布式技术概览
  • 数据库常规操作
  • 小众语言ruby在苹果中的初步应用
  • 【jvm】记一次hive堆heap内存溢出的排查
  • Spring自定义注解
  • C++中使用分治法求最大值
  • 为什么要用docker?
  • 函数题 6-2 多项式求值【PAT】
  • [译] 怎样写一个基础的编译器
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • ➹使用webpack配置多页面应用(MPA)
  • 78. Subsets
  • CAP 一致性协议及应用解析
  •  D - 粉碎叛乱F - 其他起义
  • express如何解决request entity too large问题
  • If…else
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • javascript数组去重/查找/插入/删除
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • MQ框架的比较
  • Sass Day-01
  • 阿里云应用高可用服务公测发布
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 类orAPI - 收藏集 - 掘金
  • 前端知识点整理(待续)
  • 设计模式(12)迭代器模式(讲解+应用)
  • 什么软件可以剪辑音乐?
  • 异步
  • 《码出高效》学习笔记与书中错误记录
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ###项目技术发展史
  • #Linux(Source Insight安装及工程建立)
  • #NOIP 2014# day.1 T2 联合权值
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (3)(3.5) 遥测无线电区域条例
  • (7)STL算法之交换赋值
  • (k8s)Kubernetes本地存储接入
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (五)网络优化与超参数选择--九五小庞
  • (转)fock函数详解
  • (转)mysql使用Navicat 导出和导入数据库
  • .net 4.0发布后不能正常显示图片问题
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径