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

Vue 3 中 ref 与 reactive 的对比

Vue 3 中 ref 与 reactive 的对比

  • Vue 3 中 ref 与 reactive 的对比
    • 一、定义和基本使用
      • ref
      • reactive
    • 二、响应式原理
      • ref
      • reactive
    • 三、适用场景
      • ref
      • reactive
    • 四、注意事项
      • ref
      • reactive

Vue 3 中 ref 与 reactive 的对比


在 Vue 3 中,refreactive 都是用于创建响应式数据的方法,但它们在使用方式、应用场景等方面存在一些差异,以下是详细对比:


一、定义和基本使用

ref

  • 定义:ref 用于创建一个响应式的引用对象,它可以包裹任何类型的值,包括基本数据类型(如数字、字符串、布尔值等)和对象。
  • 基本使用:通过 ref 函数创建一个响应式引用,使用时需要通过 .value 来访问和修改其值。
import { ref } from 'vue'; 
 
const count = ref(0); 
// 访问值 
console.log(count.value); 
// 修改值 
count.value = 1; 

reactive

  • 定义:reactive 用于创建一个响应式对象,它只能接受一个普通对象作为参数,并返回该对象的响应式代理。
  • 基本使用:直接使用 reactive 函数将一个普通对象转换为响应式对象,访问和修改其属性时无需额外的 .value
import { reactive } from 'vue'; 
 
const state = reactive({ 
  name: 'John', 
  age: 30 
}); 
// 访问属性 
console.log(state.name); 
// 修改属性 
state.age = 31; 

二、响应式原理

ref

  • ref 是基于 Object.defineProperty()Proxy(取决于运行环境)实现的。它将传入的值包装在一个对象中,并通过 gettersetter 来实现响应式。当值发生变化时,Vue 会自动更新与之绑定的 DOM。

reactive

  • reactive 是基于 Proxy 实现的。它会创建一个对象的代理,拦截对象的属性访问和修改操作,从而实现响应式。这意味着 reactive 可以对对象的深层属性进行响应式追踪。

三、适用场景

ref

  • 基本数据类型:当需要创建响应式的基本数据类型时,ref 是首选。因为基本数据类型不是对象,无法直接使用 reactive
  • 模板中使用:在模板中使用 ref 时,Vue 会自动解包 .value,可以直接使用 {{ count }} 来显示值。
  • 与外部库集成:在与一些需要原始值的外部库集成时,ref 可以方便地提供原始值。

reactive

  • 复杂对象:当需要创建响应式的复杂对象时,reactive 更为合适。它可以直接处理对象的属性,无需额外的 .value 操作。
  • 对象嵌套:对于嵌套对象,reactive 可以自动处理深层属性的响应式,无需手动为每个嵌套对象创建 ref

四、注意事项

ref

  • 解构赋值:对 ref 进行解构赋值会失去响应式。如果需要解构 ref 并保持响应式,可以使用 toRefs 函数。
import { ref, toRefs } from 'vue'; 
 
const state = ref({ 
  name: 'John', 
  age: 30 
}); 
// 解构后失去响应式 
const { name, age } = state.value; 
// 使用 toRefs 保持响应式 
const { name, age } = toRefs(state.value); 

reactive

  • 对象替换:不能直接将 reactive 对象替换为另一个对象,否则会失去响应式。如果需要替换对象,可以使用 reactive 重新创建一个响应式对象。
import { reactive } from 'vue'; 
 
const state = reactive({
  name: 'John', 
  age: 30 
}); 
// 错误:失去响应式 
state = reactive({ 
  name: 'Jane', 
  age: 25 
}); 

综上所述,refreactive 在 Vue 3 中都有各自的优势和适用场景,开发者可以根据具体需求选择合适的方法来创建响应式数据。


文章转载自:
http://anisocercal.hfytgp.cn
http://beefburger.hfytgp.cn
http://austral.hfytgp.cn
http://butskell.hfytgp.cn
http://armomancy.hfytgp.cn
http://charming.hfytgp.cn
http://attainable.hfytgp.cn
http://aisled.hfytgp.cn
http://bullfrog.hfytgp.cn
http://absinthism.hfytgp.cn
http://antideuteron.hfytgp.cn
http://chalcophanite.hfytgp.cn
http://anglicist.hfytgp.cn
http://azonic.hfytgp.cn
http://bloodlust.hfytgp.cn
http://caucasic.hfytgp.cn
http://caul.hfytgp.cn
http://cheekybone.hfytgp.cn
http://alienism.hfytgp.cn
http://agism.hfytgp.cn
http://bean.hfytgp.cn
http://admire.hfytgp.cn
http://centesimo.hfytgp.cn
http://anciently.hfytgp.cn
http://brabble.hfytgp.cn
http://biltong.hfytgp.cn
http://analemma.hfytgp.cn
http://cancelation.hfytgp.cn
http://cecum.hfytgp.cn
http://catholicate.hfytgp.cn
http://www.dtcms.com/a/123512.html

相关文章:

  • window实现多jdk共存、便捷切换
  • AWS云安全实践:基于CISA关键措施的检测与实施指南
  • Spring Boot 线程池配置详解
  • Docker 介绍 · 安装详细教程
  • pycharm中安装Charm-Crypto
  • PostgreSQL-常用命令
  • 未来杭州:科技与茶香交织的生态诗篇
  • Jmeter分布式测试启动
  • 【Android】Android Activity 横屏设置详解及常见异常问题解决方法汇总
  • 网络层-IP地址计算
  • MCU的最佳存储方案CS创世 SD NAND
  • 第7篇:Linux程序访问控制FPGA端LEDR<五>
  • Go:入门
  • S32K144入门笔记(二十四):FlexCAN传输、接收简述
  • SAP系统年终结算出错
  • MacOS中的鼠标、触控板的设置研究
  • C#基础类型系统-接口
  • Java代码块详解:分类、作用与最佳实践
  • p2p的发展
  • MySQL快速入门
  • 财务管理域——管理会计系统
  • Kotlin 学习-方法和参数类型
  • 「The Road to Web3 Cloud」香港活动回顾|波卡的 Web3 Cloud 愿景
  • winserver2022备份
  • MFC案例:用鼠标移动窗口图像的实验
  • HAL TIM PWM产生 蓝桥杯
  • Java 定时器的全面解析(Timer)
  • Swift Programming All in One苹果程序开发自学之路
  • 【Dify 本地 tools 集成指南】MCP 和 OpenAPI
  • sentinel熔断降级