ref() 和 reactive() 区别

ref()reactive() 都是 Vue 3 中用于创建响应式数据的方法,但它们之间存在一些关键差异。

首先,ref() 用于创建响应式的标量值,比如数字、字符串、布尔值等基本数据类型,以及对象和数组等复杂数据类型。当你使用 ref() 时,你会得到一个带有 .value 属性的对象,这个对象是响应式的。例如:

const count = ref(0)

这里的 count 是一个响应式的 ref 对象,你可以通过 count.value 来访问和修改它的值。

reactive() 用于创建响应式的对象和数组。它接受一个对象或数组,并返回一个响应式的代理对象。例如:

const state = reactive({ count: 0 })

这里的 state 是一个响应式的对象,你可以直接访问和修改它的属性,如 state.count

所以,主要的区别在于:

  1. 用途

    • ref():适用于各种数据类型,包括基本类型和引用类型。

    • reactive():仅适用于对象和数组。

  2. 访问和修改

    • ref():通过 .value 属性访问和修改值。

    • reactive():直接访问和修改对象的属性。

  3. 嵌套数据的响应式

    • ref():如果内部包含对象或数组,需要递归地使用 ref()reactive()

    • reactive():自动处理嵌套对象和数组的响应式。

  4. 性能

    • reactive():对于大量数据的对象,性能可能优于使用多个 ref()

总之,根据你的数据类型和需求,你可以选择使用 ref()reactive() 来创建响应式数据。对于基本类型和单个值,ref() 是一个好选择;对于复杂的对象和数组,reactive() 更为适合。

示例

使用 ref()

import { ref } from 'vue'

export default {

setup() {

复制代码
const count = ref(0)

function increment() {

  count.value++

}

return {

  count,

  increment

}

}

}

使用 reactive()

import { reactive } from 'vue'

export default {

setup() {

复制代码
const state = reactive({ count: 0 })

function increment() {

  state.count++

}

return {

  count: state.count,

  increment

}

}

}

相关推荐
前端 贾公子几秒前
第08章:中间件(5)
服务器·前端·javascript
tech_zjf43 分钟前
当 AI 把 Next.js Route 越写越快:我为什么做了 next-route-kit
前端·后端
常宇佳1 小时前
vue3 @代指src路径设置
前端·typescript·vue
砚凝霜1 小时前
软考网络工程师|案例分析:Eth‑Trunk 链路聚合、iStack 堆叠、CSS 集群核心考点总结
前端·css·网络
二级小助手1 小时前
二级Web前端选择题高频真题20道与考场避坑笔记
javascript·css3·html5·web前端·计算机二级·二级web·web真题
珐恩AI-人工智能1 小时前
大模型意图召回偏差分析:GEO如何解决“有收录却不触发问答曝光”的难题
大数据·前端·人工智能·html·流量运营·geo优化
程序员老赵2 小时前
Docker 部署禅道 ZenTao:轻松搭建研发项目管理平台
前端·后端·github
前端小卡拉2 小时前
用了大半年 AI 编程工具,我才搞懂 Skill 到底是什么
前端·javascript
hunterandroid2 小时前
[鸿蒙从零到一] HarmonyOS 单元测试与 UI 自动化测试实战:从代码质量到用户体验的全链路保障
前端
郭邯2 小时前
用 Intl.DateTimeFormat 手写一个时区转换器,顺便聊聊我和 AI 结对编程的日常
前端·javascript