Vue v3.1.0 Pluto 版本发布

1,463

功能介绍

  • 迁移构建: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中,这个参数在技术上是内部的,只用于生成警告,在用户区代码中不应该需要。这一移除使得选项合并的缓存更加有效 。

错误修正

原文链接:github.com/vuejs/vue-n….