a.性能的提升(包括打包大小减少,初次渲染的速度加快,更新渲染速度加快,内存减少)
b.源码的升级(响应式的原理发生了变化,由原来的defineProperty变成了Proxy;重写虚拟DOM的实现和Tree-Shaking )
拓展:Tree-Shaking:用于描述移除js上下文中未引用的代码行为的术语。webpack支持Tree-Shaking。
c.拥抱TypeScript(vue3可以更好的支持TypeScript)
d.新特性:
Composltion API(组合API)
ref与reactive
watch与watchEffect
provide与inject
新的内置组件
Fragment
Teleport
Suspense
其他改变
新的生命周期钩子
data选项应始终被声明为一个函数
移除keyCode支持作为v-on的修饰符
首先:setup是vue3的一个新的配置项,值为一个函数。它的作用相当于是代替了vue2中的data,computed,method等等。其次它的返回值有两种除了返回一个对象外还可以返回一个渲染函数。
不过需要注意的一点是:setup不能是一个async函数,因为返回值不再是return的对象,而是promise,模板看不到return对象中的属性。
setup的执行时机
在beforeCreate之前执行一次,this是undefined
setup的参数
props:值为对象,包含:组件外部传递过来,且组件内部声明接受了属性。
context:上下文对象
attrs:值为对象,包含:组件外部传递过来但没有在props配置中声明的属性,相当于this.$attrs
slots:收到的插槽内容,相当于this.$slots
emit:触发自定义事件函数,相当于this.$emit
例子如下:
子组件Demo.vue:
<template>
<div style="text-center: left">
<h1>个人信息</h1>
<h2>姓名:{{ person.name }}</h2>
<h2>年龄:{{ person.age }}</h2>
<h2>传递信息:{{ msg }}</h2>
<button @click='test'>测试触发一下Demo组件的hello事件</button>
</div>
</template>
<script>
import { reactive } from "vue";
export default {
name: "Demo",
props:['msg','school'],
emits:['hello'],
// beforeCreate() {
// console.log("--------beforeCreate--------");
// },
setup( props,context) {
console.log("-------setup--------");//setup早于beforeCreate执行
console.log('-------setup------',props);
console.log('-------setup------',context);
console.log('-------setup------',context.attrs);//相当于vue2中的$attrs
console.log('-------setup------',context.emit);//触发自定义事件
console.log('-------setup------',context.slots);//插槽
let person = reactive({
name: "张三",
age: 18,
});
//方法
function test() {
context.emit('hello',666)
}
//返回一个对象
return {
person,
test
};
},
};
</script>
父组件App.vue
<template>
<Demo @hello="showHelloMsg" msg="你好啊" school="尚硅谷">
<template v-slot:qwe><span>操作与系统</span></template>
<template v-slot:asd><span>马原</span></template>
</Demo>
</template>
<script>
import Demo from "./components/Demo.vue";
export default {
name: "App",
components: {
Demo,
},
setup() {
function showHelloMsg(value) {
alert(`你好啊,你触发了hello事件,我收到的参数时${value}!`);
}
return{
showHelloMsg
}
},
};
</script>
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务