答:vue2中我们在data里定义数据显示是很方便的,因为vue3中我们还要在setup里返回我们定义的数据,那为什么vue3要这么麻烦呢?
因为vue2在data里定义数据,这些数据的响应式是有缺陷的
我们增加和删除对象、数组里的数据,vue2捕获不到就不会去更新视图,因为vue2响应式使用的是Object.defineProperty实现的数据代理和数据劫持,是捕获不到增加和删除操作的。
而vue3里我们定义对象类型的数据时使用的是reactive函数,这个函数会返回一个proxy代理对象, proxy内部是可以检测到删除和增加的,所以响应式比vue2的更强大。
我们将源对象传入reactive函数,就会返回一个代理对象,我们对代理对象的操作都会被捕获(数据劫持),然后vue就会去更新dom然后用Reflect去修改源对象。
虽然ref传入的是基本数据,但是如果传入对象类型数据,就回去求助reactive函数