重大变更
此页面列出了 Vue 3 中与 Vue 2 相比的所有重大变更。
虽然看起来发生了很多变化,但您所熟悉和喜爱的 Vue 的许多方面仍然保持不变;但我们希望尽可能地做到全面,并为每个记录的变更提供详细的解释和示例。
详情
全局 API
模板指令
v-model在组件上的使用已重新设计,替换了v-bind.synckey在<template v-for>和非v-for节点上的使用已更改v-if和v-for在同一元素上使用时的优先级已更改v-bind="object"现在对顺序敏感v-on:event.native修饰符已移除
组件
- 函数式组件只能使用普通函数创建
- 单文件组件 (SFC)
<template>上的functional属性和functional组件选项已弃用 - 异步组件现在需要使用
defineAsyncComponent方法创建 - 组件事件现在应该使用
emits选项声明
渲染函数
- 渲染函数 API 已更改
$scopedSlots属性已移除,所有插槽都通过$slots作为函数公开$listeners已移除 / 合并到$attrs$attrs现在包含class和style属性
自定义元素
其他细微变更
destroyed生命周期选项已重命名为unmountedbeforeDestroy生命周期选项已重命名为beforeUnmount- Props
default工厂函数不再具有对this上下文的访问权限 - 自定义指令 API 已更改以与组件生命周期保持一致,并移除了
binding.expression data选项应始终声明为函数- 来自 mixin 的
data选项现在浅层合并 - 属性强制策略已更改
- 一些过渡类已重命名
<TransitionGroup>现在默认情况下不渲染任何包装元素- 当观察数组时,回调函数仅在数组被替换时触发。如果您需要在发生变异时触发,则必须指定
deep选项。 - 没有特殊指令 (
v-if/else-if/else、v-for或v-slot) 的<template>标签现在被视为普通元素,并将生成一个本地的<template>元素,而不是渲染其内部内容。 - 已挂载的应用程序不会替换其挂载到的元素
- 生命周期
hook:事件前缀已更改为vnode-
已移除的 API
keyCode作为v-on修饰符的支持- $on、$off 和 $once 实例方法
- 过滤器
- 内联模板属性
$children实例属性propsData选项$destroy实例方法。用户不再需要手动管理各个 Vue 组件的生命周期。- 全局函数
set和delete,以及实例方法$set和$delete。它们不再需要使用基于代理的变更检测。