[Vue] 响应式里面 ref 和 reactive 有啥区别【热度: 414】

关键词:响应式 api

在 Vue 3 中,refreactive 是创建响应式数据的两种不同方法,它们都是 Vue 的响应式系统的一部分,但在使用方式和适用场景上有一些区别。下面是 refreactive 的主要区别:

ref

  • 用法ref 用于创建一个响应式的引用类型数据。当你需要使基本数据类型(例如:string, number, boolean)变得响应式时,ref 是一个很好的选择。
  • 返回值ref 返回一个包含 value 属性的对象。你需要通过 .value 属性来访问或修改其内部值。
  • 适用场景:适用于基本数据类型,也可以用于对象和数组,但主要是为了基本数据类型设计的。
import { ref } from "vue";

const count = ref(0);
console.log(count.value); // 访问值
count.value++; // 修改值

reactive

  • 用法reactive 用于创建一个响应式的复杂类型数据,如对象或数组。
  • 返回值:直接返回原始对象的响应式代理,不需要通过 .value 属性来访问或修改。
  • 适用场景:是为了使对象或数组这样的引用数据类型变得响应式而设计的。
import { reactive } from "vue";

const state = reactive({ count: 0 });
console.log(state.count); // 访问值
state.count++; // 修改值

主要区别

  1. 数据类型ref 主要用于基本数据类型,但也可以用于对象和数组;reactive 适用于对象或数组等引用数据类型。
  2. 返回值ref 返回一个对象,这个对象包含一个 value 属性,这意味着你需要通过 .value 来获取或设置值;而 reactive 返回的是对象或数组的响应式代理,可以直接操作。
  3. 模板中使用:在模板中使用时,ref 创建的响应式数据访问时不需要 .value,Vue 模板会自动解包;reactive 对象在模板中的行为与普通对象相同。

使用建议

  • 当你处理基本数据类型时,使用 ref
  • 当你需要管理一个复杂的数据结构(如对象或数组),使用 reactive 以保持代码的简洁和直观。