在 Vue 3 中,ref 和 reactive 是两种用于创建响应式数据的方法。它们各自有不同的用途和特点,适用于不同的场景。下面是对这两个函数的详细解释:
ref
ref 用于创建一个响应式的引用类型。它通常用于创建基本数据类型的响应式引用,例如字符串、数字或布尔值,也可以用于创建对象或数组的响应式引用。ref 返回一个包含一个内部值的对象,这个对象具有 .value 属性,用于访问或修改该值。
用途
- 基本数据类型的响应式引用:当你需要一个基本数据类型的响应式引用时。
- 对象和数组的响应式引用:当你需要一个对象或数组的响应式引用时。
示例
import { ref } from 'vue';
const count = ref(0); // 创建一个数字类型的响应式引用
count.value = 10; // 修改 count 的值
console.log(count.value); // 输出 10
const person = ref({ name: 'Alice' }); // 创建一个对象类型的响应式引用
person.value.name = 'Bob'; // 修改 person 的 name 属性
console.log(person.value.name); // 输出 Bob
reactive
reactive 用于创建一个响应式的对象或数组。它接收一个对象或数组作为参数,并返回一个响应式版本的对象或数组。与 ref 不同,reactive 返回的对象或数组本身是响应式的,而不是一个包含 .value 属性的引用。
用途
- 创建响应式的对象或数组:当你需要一个对象或数组的响应式版本时。
- 避免使用
.value属性:当你不想使用.value属性来访问或修改值时。
示例
import { reactive } from 'vue';
const state = reactive({ count: 0, name: 'Alice' }); // 创建一个响应式的对象
state.count = 10; // 修改 count 的值
console.log(state.name); // 输出 Alice
const numbers = reactive([1, 2, 3]); // 创建一个响应式的数组
numbers.push(4); // 向数组添加元素
console.log(numbers); // 输出 [1, 2, 3, 4]
比较
ref:返回一个包含.value属性的引用,用于访问或修改内部值。reactive:直接返回一个响应式的对象或数组,不需要使用.value属性。
何时使用
- 当你需要一个基本数据类型的响应式引用,或者需要一个对象或数组的响应式引用,并且希望使用
.value属性来访问或修改值时,使用ref。 - 当你需要一个对象或数组的响应式版本,并且希望直接通过对象或数组的属性来访问或修改值时,使用
reactive。
总结
ref 和 reactive 都是用来创建响应式数据的方法,但它们的使用场景有所不同。ref 适用于创建基本数据类型的响应式引用,以及对象或数组的响应式引用,而 reactive 用于创建响应式的对象或数组,可以直接通过属性来访问或修改值。根据你的具体需求选择合适的函数来处理响应式数据。
ref vs reactive
同: 把数据变成响应式数据,底层都是使用proxy代理和反射实现
异:1ref 数据类型,可以是基本,也可以是引用,如引用側底层使用reactive,而reactive 则是引用类型
2.ref 在模版层可以直接写,而在js代码层操作需要带上value,这些reactive则不用
3.ref可以直接修改整个数据,而reactive 则不能,需要使用objec.assin(car,{name:'auto'})