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

}

}

}

相关推荐
treasure14010 小时前
【复古】浅尝Django前后端不分离
前端·css·python·django·bootstrap·html·web
jay神11 小时前
基于 YOLOv8 的手势识别系统(Web 版)
前端·人工智能·python·深度学习·yolo·计算机视觉·计算机毕业设计
屏什么录11 小时前
长时间录屏中途崩溃:MP4 打不开的 6 种救回方案与参数设置
前端·音视频开发
ruanno_top11 小时前
表单重置后,验证码还显示已通过:Vue 受控组件的 3 种假同步
vue.js
code_Bo11 小时前
不只命令行:我把跨 Agent 会话同步做成了桌面应用
前端·javascript·后端
kyriewen12 小时前
AI 能把页面写出来,为什么改个需求就开始崩?
前端·javascript·人工智能
OpsEye12 小时前
同一套用例跑两个大模型接口,差异到底出在哪
javascript·ai编程
X1A0RAN12 小时前
PPT 图片批量处理教程:导出全部幻灯片 · 提取全部素材
开发语言·javascript·powerpoint
涛涛ing13 小时前
2026年最值得关注的前端变化,藏在“默认值”里
前端
量化分析码农13 小时前
股票历史数据的复权参数对照:多级别返回的字段与数值差异
java·javascript·后端