Open FionaRush opened 3 years ago
有在vue2项目上直接升级vue3吗?
有在vue2项目上直接升级vue3吗?
还没有实践,因为之前使用的 Element UI 还没有出 Vue3 的支持版本,现在已经支持了Vue3 Element UI ,有需要可以看一下
有在vue2项目上直接升级vue3吗?
还没有实践,因为之前使用的 Element UI 还没有出 Vue3 的支持版本,现在已经支持了Vue3 Element UI ,有需要可以看一下
我们现在在升级项目,升到vue3
有在vue2项目上直接升级vue3吗?
还没有实践,因为之前使用的 Element UI 还没有出 Vue3 的支持版本,现在已经支持了Vue3 Element UI ,有需要可以看一下
我们现在在升级项目,升到vue3
那你可以参考这个文档升级,这个得到大佬肯定的升级技术方案,只欠个落地
有在vue2项目上直接升级vue3吗?
随着 vue3 的发布和越来越多项目的使用,之前使用 vue2 的项目也不能拉下,vue2 升级 vue3 迫在眉睫。在升级之前你需要知道升级的内容和详细变更项。
本文主要整理 vue2 升级 vue3 时,不兼变更的详解释和对比。这里有一份正式升级实践所需的 升级 todo 可供参考。
安装使用
<script src="https://unpkg.com/vue@next"></script>
Breaking
全局 API
1. 实例创建方式
2. 全局 API 调用方式改变
在 Vue3 中全局和内部 API 被重新构造为 tree-shakable 结构,以 ES 模块构建的命名导出方式访问全局 API。打包的时候不会把所有的 API 都打包进来,只会打包 import 的 API。涉及到的全局 API 改动如下:
例如:
data
v-model
在 Vue2 中,v-model 指令必须使用为 value 的 prop,并且只允许在组件上使用一个 model 模块; 在 Vue 3 中,双向数据绑定的 API 更标准化,减少了使用 v-model 指令时的混淆并且更加灵活。 可以在同一个组件上使用多个 v-model 进行双向绑定,可以使用自定义 v-model 修饰符。
插槽统一
this.$scopedSlots
改为this.$slots
; 在 Vue2 的某些场景,当有用到自定义 render 方法和插槽时,会用到this.$scopedSlots
获取数据。在 Vue3 中需要统一替代成this.$slots
。例如:// vue3 h(LayoutComponent, {}, { header: () => h('div', this.header), content: () => h('div', this.content) }) this.$slots.header
在 Vue3 中不再支持点分隔字符串路径。为了发现对象内部值的变化,可以在选项参数中指定 deep: true 如果是 watch 数组,回调仅在替换数组时触发,不需要指定 deep: true 。
指令钩子
vue3 中指令的钩子函数仿照了组件中的钩子函数命名规则
优先级
vue3 中 v-if 优先级始终高于 v-for
v-bind 合并
vue3 中 v-bind 的绑定顺序将影响渲染结果
key
<template v-for... >
key 放置在<template>
标签上;函数组件
在 Vue 2 中,函数式组件有两个主要作用:
在 Vue 3 中,有状态组件的性能已经提高到可以忽略不计的程度。此外,有状态组件现在还包括返回多个根节点。因此,函数式组件剩下的唯一用例就是简单组件,比如创建动态标题的组件。
template
template 没有特殊指令( v-if / else-if / else,v-for 或 v-slot )的标记,视为普通元素,并将生成原生的
<template>
元素,而不是渲染其内部内容过渡类名 Class
<transition>
作为组件的根元素时,外部切换不会触发过渡效果。只能在<transition>
内使用切换;Render API
如果项目中使用
<template>
,则可忽略该条。1、 h 由全局导入,不再作为参数传递给 render;例如:
2、render 函数参数在有状态组件和功能组件之间变得更加一致; 3、整个 VNode props 的结构被展平。例如:
prop
排查全部 prop 的 default,确保都不使用 this,3.x版本中 prop 的 default 不能访问 this ,可以使用 inject 来访问注入的 property 。
inheritAttrs
inheritAttrs: false 的组件,如果之前依赖 class 和 style,那么样式可能错误,因为这些属性可能应用待别的元素上了。 2.x 中
$attrs
包含了所有的 attribute 单没有 class 和 style; 3.x 中$attrs
包含了所有的 attribute 包括 class 和 style,这些 attribute 都会应用到子组件上。自定义元素互操作
Removed
1. v-on:keyCode
在 Vue2 中,我们可以通过 v-on:keyup.112 来指定按钮的触发事件,但是在 Vue3 中需要使用别名,例如 v-on:keyup.delete;
2. $on, $off, $once
3. filters
在 Vue3 中,移除了组件的 filters 项,可以使用 methods 的或者 computed 替代 。
4. inline-template
在 Vue3 中,移除了组件的 inline-template 项。 在 Vue2 中,在父组件引入子组件时,会用到 inline-template 来使子组件的内容也得到展示。例如:
5. 生命周期
6. 实例 property
vm.$children
vm.$scopedSlots
vm.$isServer
合并至vm.$listeners
$attrs