总结Vue3.x变化
1,移除了哪些?
parent还在)
new Vue({ data:{} }) 这个写法淘汰了,如果用到data一定要使用工厂函数。
移除了 off / emit还在)
在V3中,事件总线这种通信这种基于订阅发布模式的通信方案也不能用了。
移除了全局过滤器(Vue.filter)、移除了局部过滤器 filters选项。
在V3中,Vue这个构造函数不能用了,所以像V2中的那个全局API都不能了,所以Vue的原型链也不能用了。
在V3中,不再支持修改键盘码了。
移除了attrs还在)
移除了 el选项、model选项、propsData选项
v-on的.native修饰符已被移除。
2,新增了哪些?
在V3中,增加了 emits选项、defineEmits,用于在子组件中接收自定义事件。
在组件中,使用 getCurrentInstance 可以访问 app根实例。
新增了 suspense,用于给异步组件添加交互效果。
新增了 teleport的to属性,用于把包裹的视图结构“穿梭”到父级的DOM节点中去。
新增了样式的玩法,第一个玩法是在style中可以使用v-bind来做动态样式;在style标签上module='default'实现 样式模块化,在组合中使用useCssModule访问样式模块。
新增了一个指令 v-memo,用法:在div上v-memo='[a, b]',有且仅有当a或b变化时,其包裹的视图结构才会更新。
在V3中,新增了 useSlots,用于在子组件中访问插槽实例。相当于V2中的this.$slots。
3,变化了哪些?
在V2中,v-for和ref一起作用,可以自动收集refs对象,在this.$refs上访问。在V3中,不能自动收集了,需要自己封装收集方法
在V2中,ref属性作用在HTML标签或组件上,可以在this.$refs上访问DOM或组件实例;在V3中,ref属性配合ref这个组合API为完成对DOM或组件实例的方法,div ref='box',这个box是一个ref对象,使用box.value访问对应的DOM。
在V3中,使用 defineAsyncComponent 定义更加友好的异步组件。
在V2中,使用this.attrs访问父组件传递过来的自定义属性们(包含class和style)。
在V3中,使用 app.directive({}/fn) 自定义指令,注意在指令的选项钩了发生了若干变化。
在V3中,template视图模块支持多节点。(当在自定义组件上使用class/style时、在自定义组件上使用多个v-model时,都报了多节点的警告,这时建议将其改成单一根节点)
在V2中,provide/inject是没有响应式的。在V3中,provide用选项写法时,必须配合computed才能实现响应式;provide用组合写法时,默认就有响应式。
在V2中,Vue.nextTick() / this.$nextTick 不能支持 Webpack 的 Tree-Shaking 功能的。在 V3 中的 nextTick ,考虑到了对 Tree-Shaking 的支持。
V3中,对于 v-if/v-else/v-else-if的各分支项,无须再手动绑定 key了, V3会自动生成唯一的key。比如transition对多节点执行动画时,无须再加key了。
在V3中,render选项的函数参数不再是h函数了,如果要使用h函数,得从vue导入。
transition过渡动画的变化:v-enter-from/v-enter-active/v-enter-to和V2不同了;对多节点执行显示与隐藏时,不需要再加key了。当我们封装自定义组件时,如果transition是这个组件的根节点,要使用props传值来触发动画。
同一节点上使用 v-for 和 v-if ,在V2中不推荐这么用,且v-for优先级更高。在V3中,这种写法是允许的,但 v-if 的优秀级更高。
watch这个组合API:允许同时监听多个变量的变化,允许停止监听。const stop = watch([a, b], callback) 在V3中,使用defineProps接收自定义属性时,如果这个属性是对象类型,其default: () => { return },并且在这个default工厂函数中可以使用inject。
v-model有三个变化,在自定义组件上v-model = :modelValue + @update:modelValue, v-model:name = :name + @update:name;在自定义组件上,可以同时使用多个v-model,在People 组件上使用v-model='age' v-model:name='name';还支持自定义修饰符,注意在子组件中必须使用defineProps来分别接收自定义修饰符。