1.语法差异
1.Vue 2中,一个组件需要使用Vue.component
方法进行注册,并使用export default
导出组件对象。
2.Vue 3中,组件的导出和注册可以使用新的语法糖<script setup>
,只需将组件的配置放在<script>
标签中,并使用defineComponent
方法导出组件对象
2.数据定义
1.Vue 2中,数据需要在data
选项中定义,并且只有在data
中定义的数据才会被Vue的响应式系统追踪和更新。
1.1:Vue 2中,组件的方法需要在methods
选项中定义。
2.Vue 3中,可以直接使用ref
或reactive
函数来定义响应式数据,这样无需将数据放在data
选项中。
2.2:Vue 3中,可以直接在setup
函数中定义组件的方法,并将其返回。
3.生命周期钩子
1.Vue 2中,组件的生命周期钩子是使用特定的方法名来定义的,例如created
、mounted
等。
2.Vue 3中,生命周期钩子的命名有所变化,例如mounted
改为onMounted
4.响应式原理
1.Vue 2使用了一个名为Object.defineProperty
的API来实现数据的响应式。在Vue 2中,当你将一个对象传递给Vue实例作为其data选项时,Vue会遍历这个对象的属性,并使用Object.defineProperty为每个属性添加getter和setter方法。这样一来,当你访问或修改这些属性时,Vue就能够追踪到变化,并触发视图的更新。
2.Vue 3对其响应式系统进行了重写,引入了一个名为Proxy
的新API来实现数据的响应式。Proxy是ES6中的一个新特性,它允许你拦截对对象的访问、修改和删除等操作,并在拦截函数中执行自定义的逻辑。
2.1在Vue 3中,当你将一个对象传递给Vue实例作为其data选项时,Vue会使用Proxy代理这个对象,并对对象的属性进行拦截。这样一来,当你访问或修改这些属性时,拦截函数会被触发,并且你可以在拦截函数中执行一些额外的逻辑,比如依赖收集和派发更新。
5.总结