news 2026/5/7 19:16:40

VUE3中,reactive()和ref()的区别10分钟讲清楚

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VUE3中,reactive()和ref()的区别10分钟讲清楚

在 Vue 3 的组合式 API 中,reactive()ref()都是创建响应式数据的核心 API,但它们的设计目标、适用场景和使用方式有本质区别。

1. 核心定位:处理的数据类型不同

  • reactive()仅用于包装「对象类型」(包括普通对象、数组、Map、Set 等),返回一个深层响应式的 Proxy 代理对象

    它无法直接处理基本类型(如stringnumberboolean),否则会抛出警告且无效。

  • ref()可以包装「任意类型」(基本类型 + 对象类型),返回一个Ref<T>类型的响应式容器(本质是带.value属性的对象)。

    对于对象类型,ref()内部会自动调用reactive()将其转换为深层响应式 Proxy。

2. 访问方式:是否需要.value

  • reactive():直接访问对象的属性(无需额外语法)。

    示例:

    import { reactive } from 'vue' const user = reactive({ name: 'Alice', age: 20 }) console.log(user.name) // 直接访问 → "Alice" user.age++ // 直接修改 → 响应式更新
  • ref():必须通过.value访问或修改内部值(模板中会自动解包,无需写.value)。

    示例:

    import { ref } from 'vue' const count = ref(0) // 包装基本类型 console.log(count.value) // 必须加 .value → 0 count.value++ // 修改值 → 响应式更新 const user = ref({ name: 'Bob' }) // 包装对象类型(内部转 reactive) console.log(user.value.name) // 先 .value 拿到代理对象 → "Bob" user.value.age = 21 // 修改属性 → 响应式更新

3. 赋值行为:能否直接替换整个数据

  • reactive()不能直接替换整个对象(会丢失响应式)。

    因为reactive()返回的是原对象的 Proxy 代理,若直接赋值新对象(如state = { ... }),新对象未被 Proxy 包裹,不再是响应式的。

    错误示例:

    const state = reactive({ count: 0 }) state = { count: 1 } // ❌ 错误:直接替换对象,失去响应式
  • ref()可以直接修改.value(无论基本类型还是对象类型)。

    因为ref().value是可变的容器,替换.value会触发响应式更新。

    正确示例:

    const count = ref(0) count.value = 1 // ✅ 正确:修改 .value → 响应式更新 const user = ref({ name: 'Tom' }) user.value = { name: 'Jerry' } // ✅ 正确:替换整个对象 → 响应式更新

4. 适用场景:如何选择?

场景

推荐 API

原因

处理基本类型(数字、字符串、布尔)

ref()

reactive()无法处理基本类型,必须用ref()包装。

处理单值对象(如一个配置项)

ref()

方便通过.value整体替换,避免reactive()的赋值陷阱。

处理复杂对象/数组(多属性、嵌套结构)

reactive()

直接访问属性更简洁,无需.value

需要统一响应式逻辑(全用一种 API)

ref()

所有类型都能用ref()包装(对象类型内部转reactive),风格一致。

5. 模板中的使用差异

  • reactive():直接在模板中使用代理对象的属性(无需额外处理)。

    示例:

    <template> <div>{{ user.name }} ({{ user.age }})</div> </template> <script setup> import { reactive } from 'vue' const user = reactive({ name: 'Alice', age: 20 }) </script>
  • ref():模板中自动解包(无需写.value),直接用变量名访问。

    示例:

    <template> <div>{{ count }}</div> <!-- 自动解包 count.value --> <div>{{ user.name }}</div> <!-- 自动解包 user.value.name --> </template> <script setup> import { ref } from 'vue' const count = ref(0) const user = ref({ name: 'Bob' }) </script>

补充:toRefs()reactive()的配合

当需要将reactive()对象的属性解构到组件中时(避免失去响应式),可以用toRefs()将每个属性转为ref

import { reactive, toRefs } from 'vue' const state = reactive({ count: 0, name: 'Alice' }) const { count, name } = toRefs(state) // 转为 ref 对象 console.log(count.value) // 0(需用 .value 访问)

总结:一句话区分

  • reactive()给对象/数组穿件「响应式外套」,直接摸属性;

  • ref()给任何数据装个「响应式盒子」,开盒子用.value(模板里自动开)。

如果是新手,建议优先用ref()(处理所有类型,避免踩坑);若明确处理复杂对象,用reactive()更简洁。两者可以混合使用,核心是理解它们的响应式边界~

惠州大亚湾

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 15:57:40

Z-Image-Turbo宠物经济应用:萌宠写真、周边设计图生成

Z-Image-Turbo宠物经济应用&#xff1a;萌宠写真、周边设计图生成 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 随着“宠物经济”持续升温&#xff0c;从宠物食品到智能硬件&#xff0c;再到情感陪伴服务&#xff0c;整个产业链正在经历一场由AI驱动的变…

作者头像 李华
网站建设 2026/5/2 17:23:40

Z-Image-Turbo生成历史记录保存与检索方法

Z-Image-Turbo生成历史记录保存与检索方法 引言&#xff1a;为何需要生成历史管理&#xff1f; 在使用阿里通义Z-Image-Turbo WebUI进行AI图像创作的过程中&#xff0c;用户往往会产生大量生成结果。无论是用于艺术探索、产品设计还是内容创作&#xff0c;每一次生成都承载着独…

作者头像 李华
网站建设 2026/5/3 13:41:29

晶圆电镀的阳极钝化是什么?

晶圆电镀的阳极钝化是什么&#xff1f; 这个是可溶性阳极的常见问题&#xff0c;关于什么是可溶性阳极&#xff0c;可以参考之前文章&#xff1a;电镀机的阳极是什么材质&#xff1f; 用一句通俗的话来概括阳极钝化就是原本应该顺畅溶解、补充金属离子的阳极&#xff0c;因为…

作者头像 李华
网站建设 2026/5/7 10:44:26

算法题 子数组的最小值之和

907. 子数组的最小值之和 问题描述 给定一个整数数组 arr&#xff0c;计算所有非空连续子数组的最小值之和。由于答案可能很大&#xff0c;返回结果对 10^9 7 取模。 示例&#xff1a; 输入: arr [3,1,2,4] 输出: 17 解释: 子数组为 [3], [1], [2], [4], [3,1], [1,2], [2,4…

作者头像 李华
网站建设 2026/5/1 11:46:48

CUDA不可用时的选择:M2FP CPU版保障基础AI服务能力

CUDA不可用时的选择&#xff1a;M2FP CPU版保障基础AI服务能力 在当前AI应用快速落地的背景下&#xff0c;GPU已成为深度学习推理服务的标配硬件。然而&#xff0c;在实际部署中&#xff0c;仍存在大量无CUDA支持的边缘设备或低配服务器环境——如本地开发机、老旧工作站、嵌入…

作者头像 李华
网站建设 2026/5/1 12:19:18

基于SpringBoot的三七原产地销售平台设计与实现

一、平台开发背景与意义 三七作为云南等地的特色中药材&#xff0c;具有较高的药用价值和市场需求&#xff0c;但当前销售环节存在诸多痛点&#xff1a;产地农户缺乏直接触达消费者的渠道&#xff0c;依赖中间商导致利润压缩&#xff1b;消费者难以辨别三七的产地真伪、品质等级…

作者头像 李华