Vue3中的reactive与ref同时掉进水里,该救谁?

49 阅读2分钟

在Vue3中,reactive与ref都是创建响应式数据的工具,在实际工作中啊,有的小伙伴就有个疑惑,它俩同时掉进水里,用reactive也行,用ref也可以,那么怎么用会更好一些呢?

观点:我们只有明确知道包裹的数据是一个对象的时候就用reactive,否则就用ref。

(备注:vue3.2之后更推荐使用ref,性能得到了很大的提升。)

这个时候有的小伙伴就会有疑问了——性能提升在哪些方面????

  1. 更轻量的引用跟踪: 使用ref时,Vue可以更轻松地追踪变量的引用,因为ref直接包装了基本类型或对象,所以引用变化的检测更为高效。
  2. 更快的初始化速度: 使用ref创建响应式变量的初始化速度更快,因为它不需要递归地遍历对象的所有属性。相比之下,reactive需要在初始化时深度遍历对象的所有属性来创建响应式代理,这会导致初始化速度变慢。
  3. 更少的嵌套响应式数据: 使用ref可以更容易地避免过度嵌套响应式数据,因为ref只包装了一个变量,而不是整个对象。这样可以减少不必要的响应式数据层级,提高性能。
  4. 更少的Proxy开销: Vue 3使用了ES6的Proxy来实现响应式系统,而在使用ref时,Proxy的开销更小。因为ref直接包装了基本类型或对象,而不是整个对象树,所以Proxy需要处理的逻辑更简单,性能更高。
  5. 更轻量的引用跟踪: 使用ref时,Vue可以更轻松地追踪变量的引用,因为ref直接包装了基本类型或对象,所以引用变化的检测更为高效。
  6. 更快的初始化速度: 使用ref创建响应式变量的初始化速度更快,因为它不需要递归地遍历对象的所有属性。相比之下,reactive需要在初始化时深度遍历对象的所有属性来创建响应式代理,这会导致初始化速度变慢。
  7. 更少的嵌套响应式数据: 使用ref可以更容易地避免过度嵌套响应式数据,因为ref只包装了一个变量,而不是整个对象。这样可以减少不必要的响应式数据层级,提高性能。
  8. 更少的Proxy开销: Vue 3使用了ES6的Proxy来实现响应式系统,而在使用ref时,Proxy的开销更小。因为ref直接包装了基本类型或对象,而不是整个对象树,所以Proxy需要处理的逻辑更简单,性能更高。

这个时候不知道该救谁的小伙伴得知道该就谁了吧???????