vue3.0来了,他改变了什么?
vue3.0正式版发布(2020-09-18)
修改了什么?
v-is函数像一个动态的 2.x:is绑定——因此,要按注册名称渲染组件,其值应为 JavaScript 字符串文本:
来自组件的
data()及其 mixin 或 extends 基类被合并时,现在将浅层次执行合并:(浅拷贝对象)
Attributes(2.x 和 3.x 行为的比较)
| Attributes | v-bind value 2.x |
v-bind value 3.x |
HTML 输出 |
|---|---|---|---|
2.x “枚举attribute” i.e. contenteditable, draggable and spellcheck. |
undefined, false |
undefined, null |
removed |
true, 'true', '', 1, 'foo' |
true, 'true' |
"true" |
|
null, 'false' |
false, 'false' |
"false" |
|
其他非布尔attribute eg. aria-checked, tabindex, alt, etc. |
undefined, null, false |
undefined, null |
removed |
'false' |
false, 'false' |
"false" |
模板上的组件将支持多根组件(片段)
由于2.X在template只能有一个根节点(Dom元素),在3.X将会支持多个组件
1 | <template> |
1 | 将不会再有filters包括(全局/局部) |
非兼容变更:
functionalattribute 在单文件组件 (SFC) ` 已被移除非兼容变更:
{ functional: true }选项在通过函数创建组件已被移除
template设置key
1 | <template v-for="item in list"> |
不再支持使用数字 (即键码) 作为
v-on修饰符kebab-cased (短横线) 命名
1 | <!-- 键码版本 --> |
过渡类名
v-enter修改为v-enter-from、过渡类名v-leave修改为v-leave-from(过渡动画)
由于
v-model和value之间的这种硬编码关系的原因,产生了如何处理原生元素和自定义元素的问题。Vue 3 中,双向数据绑定的 API 已经标准化,减少了开发者在使用
v-model指令时的混淆并且在使用v-model指令时可以更加灵活。
1 | //在 2.x 中,在组件上使用 v-model 相当于绑定 value prop 和 input 事件: |
在 3.x 中,自定义组件上的
v-model相当于传递了modelValueprop 并接收抛出的update:modelValue事件:
1 | //此项为默认绑定的值modelValue,注意子组件定义时不要写错 |
v-model参数可自定义
1 | <ChildComponent v-model:title="pageTitle" /> |
多个v-model
1 | <ChildComponent v-model:title="pageTitle" v-model:content="pageContent" /> |
两者作用于同一个元素上时,
v-if会拥有比v-for更高的优先级
v-bind 的绑定顺序会影响渲染结果
1 | <!-- template --> |
自定义指令
API重命名
bind → beforeMount
inserted → mounted
beforeUpdate:新的!这是在元素本身更新之前调用的,很像组件生命周期钩子
update → 移除!有太多的相似之处要更新,所以这是多余的,请改用
updatedcomponentUpdated → updated
**beforeUnmount ** 新的!与组件生命周期钩子类似,它将在卸载元素之前调用。
unbind -> unmounted
vue3.0中的不同
1 | const num = ref(0);//普通类型的定义 |
setup()是同步执行的,不可以使用异步