Post

Ref与Reactive的区别

在Vue中可以使用两个API来创建响应式变量:

  • ref()
  • reactive()

其中, reactive(a) 会返回一个 a 的代理对象(a是非基础类型). 而 ref(a) 会返回一个 RefImp<typeof a> 对象, 其中的 value(其实是_value的访问器) 是 a 的代理对象.

当 a 是一个基本类型时, 不能使用 reactive 来创建响应式变量, 但可以使用 ref. 所以 ref 是更加通用的 API, 也是 Vue3 推荐使用的.

如果对一个 代理对象 或者 已经拥有代理的对象 进行 refreactive 操作, 只会返回 同一个 代理对象. 所以就有了以下的验证:

1
2
3
4
5
6
const obj = {a: 1, b: 2}
const obj_ref = ref(obj)
const obj_rac = reactive(obj)

console.log(obj === obj_ref) // false
console.log(obj_ref.value === obj_rac) // true
This post is licensed under CC BY 4.0 by the author.