vue | vue router | vuex | element | |
2.0 | 3 | 3 | Element | |
3.0 | 4 | 4 | Element Plus | |
区别 | 迁移 | 迁移 |
目录
vue2和vue3的区别
响应式
v-model
Provide / Inject
template标签
attrs
生命周期
风格
Teleport组件 - 新增
Suspense组件 - 新增
vue2
使用的是Object.defineProperty()对data的属性进行拦截,但是无法对新增的属性进行拦截,也无法对删除的属性进行拦截
vue3
reactive是基于proxy实现的,它可以拦截新增及删除的属性,但是无法拦截该对象整个的替换;
ref 最外层封装了一个属性value,value外层依然是靠Object.defineProperty()的get与set完成的;对于复杂属性,value也是通过Proxy实现,可以拦截obj.value上整个对象的替换
vue2中,是 :input、@input的语法糖,放在自定义组件上也是
vue3中,放在组件上是:model-value、@update::model-value的语法糖
vue2中,对于简单的数据类型,需要使用provide函数提供数据,在能在子组件中动态响应;对于引用类型,会动态获取
vue3可以提供响应式的数据,子组件接受的数据也会被响应
vue2中template不能拥有key
vue3中template可以设置key,比如在子节点为for循环的时候
vue2中this.$attrs是对属性的接收,this.$listeners是对事件的接收(未被)
vue3中context.attrs接收属性和事件
vue3没有beforCreate、created函数,进入setup()函数就相当于进入create周期
1.vue3添加了组合式API,可以把相同逻辑的代码写到一起
2.vue3每个vue文件的模板下可以有多个根元素
Teleport,把代码片段发送到已存在的dom中
to: 1.CSS 选择器字符串 2.DOM 元素对象
teleport
Hello from the modal!
作用:有了
该标签有三个事件
两个插槽
运用场景:可在多个异步组件外层运用,当组件没加载完成时,显示loading
//index.vue
suspense
Loading...
//A.vue
A组件
//B.vue
B组件
asyncResult: {{ asyncResult }}
更新中