功能介绍
- 迁移构建:Vue 3的构建,提供Vue 2的兼容行为。迁移版本的目的是帮助将现有的Vue 2应用程序迁移到Vue 3。
- 编译器-核心:空白处理策略(dee3d6a)
- 使用运行时编译器时支持组件级
compilerOptions
(ce0bbe0) - 配置:支持通过
app.config.compilerOptions
配置运行时编译器(091e6d6) - 支持通过is="vue:xxx "将普通元素转换为组件。(af9e699)
- devtools:改进KeepAlive支持(03ae300
- devtools:性能事件(f7c54ca)
- onServerPrefetch(#3070)(349eb0f)
性能改进
- 只在实际改变时触发
$attrs
更新(5566d39)。 - 编译器:解析结束标签时跳过不必要的检查(048ac29)
- 当使用全局混合时,避免对props/emits规范化进行deopt(51d2be2)
丢弃
app.config.isCustomElement
已经被弃用,现在应该嵌套在app.config.compilerOptions
下。[文档]delimiters
组件选项已被废弃,现在应该嵌套在compilerOptions
组件选项下。[文件]v-is
已被弃用,改用is="vue:xxx"
[文件]
小变化
-
this.$props
和传递给setup()
的props
对象现在总是包含所有声明的道具的键,即使是不存在的道具(4fe4de0)。这一直是Vue 2中的行为,因此被认为是一种修复(见#3288中的推理)。然而,这可能会破坏Vue 3的代码,这些代码依赖键来检查道具是否存在。解决办法是对需要缺席检查的道具使用Symbol默认值。const isAbsent = Symbol() export default { props: { foo: { default: isAbsent } }, setup(props) { if (props.foo === isAbsent) { // foo is absent } } }
-
optionMergeStrategies
函数不再接收组件实例作为第三个参数。
在Vue2中,这个参数在技术上是内部的,只用于生成警告,在用户区代码中不应该需要。这一移除使得选项合并的缓存更加有效 。
错误修正
-
runtime-dom/v-model:只在值发生变化时设置selectedIndex(#3845)(ecd97ee)。
-
观察:避免遍历被标记为无反应的对象(9acc9a1)。
-
runtime-core:修正解决mixins的inheritAttrs问题(#3742)(d6607c9),关闭#3741
-
runtime-core:更严格的compat root mount检查(32e2133)。
-
keep-alive:include/exclude应该与异步组件一起工作(#3531)(9e3708c),关闭#3529
-
runime-core:当用户调用模板表达式中的编译槽时,不应跟踪动态子代(#3554)(2010607),关闭#3548 #3569
-
runime-core/teleport:确保嵌套的teleport可以正确卸载(#3629)(4e3f82f),关闭#3623
-
compiler-dom:在Transition中使用v-if分支时,应忽略其注释(#3622)(7c74feb),关闭#3619
-
开发工具:向拥有插槽的组件发送更新(1355ee2)。
-
编译器:处理并警告config.optionMergeStrategies(94e69fd)
-
编译器-核心:当评论选项启用时,在生产中保留评论内容(e486254)
-
hmr:不要从组件类型中删除 __file 键(9db3cbb)
-
Teleport:避免改变vnode.dynamicChildren的引用(#3642)(43f7815),关闭#3641
-
watch:避免遍历非平原对象(62b8f4a)。
-
watch:this.$watch应该支持观察keypath(870f2a7)。
原文链接:github.com/vuejs/vue-n….