在Vue2中编译时会生成如下render函数:
with(this){
return _c(‘div’,[_v(_s(message))])
}
而在Vue3中,同样的模板会编译成:
return {
render() {
return _c(‘div’,{
message: ctx.message
})
}
}
这样就避免了无谓的代理操作,提升了性能。
2、代理:Vue3中的代理可以自动批量代理对象中的所有属性,无需一个一个声明。
3、模板编译优化:引入块级作用域,模板中的变量不会互相污染。
Vue3中的模板编译支持块级作用域,这样模板中的变量就不会互相污染了。
例如在Vue2中,父组件和子组件中使用相同的变量名会互相影响:
// 父组件
// 子组件
但在Vue3中,引入了块级作用域,不存在这个问题:
// 父组件
<template>
<div>{{message}}</div>
<child-component></child-component>
</template>
// 子组件
<template>
<div>{{message}}</div> // 不受父组件的影响
</template>
4、源码采用TS重写,运行更高效。Vue3使用TypeScript重写源码,类型检查更严谨,编码时也能获得更好的提示。同时TS运行效率也比纯JavaScript要高,对性能有提升作用。
二、组合式API
Vue3提供了setup方法,我们可以更灵活地组合逻辑代码,不再受以前data、methods等选项的限制。
// Vue2
export default {
data() {
return {
message: 'Hello Vue2'
}
},
methods: {
onClick() {
console.log(this.message)
}
}
}
// Vue3
import {ref, onMounted} from 'vue'
export default {
setup() {
const message = ref('Hello Vue3')
onMounted(() => {
console.log(message.value)
})
return {
message
}
}
}
三、新增特性
- Fragment:文档碎片,不再要求组件根节点是单个元素。
<!-- Vue2需使用一个根节点 -->
<template>
<div>
<header></header>
<main></main>
<footer></footer>
</div>
</template>
<!-- Vue3可以不使用根节点 -->
<template>
<header></header>
<main></main>
<footer></footer>
</template>
- Teleport:瞬移组件根节点到指定DOM位置。
<teleport to="#modal">
<div>弹窗内容</div>
</teleport>
- Suspense:支持异步组件加载时显示加载界面。
<suspense>
<async-component></async-component>
<template #fallback>
加载中...
</template>
</suspense>
四、移除过滤器
过滤器已不被官方推荐,Vue3中移除了过滤器这个概念。
Vue2中我们可以通过过滤器改变数据的展示:
<!-- 在双括号插值中 -->
<div>{{ message | capitalize }}</div>
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>
// 定义过滤器
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
但在Vue3中,过滤器被完全移除了。官方推荐通过方法调用或计算属性去实现数据变换。
五、移除事件API
Vue3移除了 o n 、 on、 on、off、$once方法,改为使用emits属性。
Vue2中我们通过 o n , on, on,off,$once管理事件:
// 监听事件
this.$on('test', handle)
// 取消监听
this.$off('test', handle)
// 监听一次
this.$once('test', handle)
Vue3中推荐使用emits属性替代这些事件API:
emits: ['test']
六、新增Composition API
Vue3全新提供了一套更适合功能开发的Composition API 如ref、reactive等,我们可以更灵活地组织组件的逻辑。
例如ref实现响应式数据:
import {ref} from 'vue'
const counter = ref(0)
reactive转换对象为响应式:
import {reactive} from 'vue'
const state = reactive({
count: 0
})
computed实现计算属性等,这套API给了我们更多可能性。
七、tree-shaking支持
Vue3支持tree-shaking,也就是打包时只打包实际用到的代码,减少了打包产物体积。
八、调整部分API命名
一些API做了重命名,语义更加明确,例如:
- $listeners 改为 emits
- $attrs 改为 expose
九、新的全局API
Vue3提供了一些新的全局API:
- createApp:用于创建Vue实例
import {createApp} from 'vue'
const app = createApp(App)
- defineComponent: 定义组件
import {defineComponent} from 'vue'
const Component = defineComponent({})
- defineAsyncComponent:定义异步组件
- nextTick:在下次DOM更新循环结束之后执行延迟回调
- h:创建虚拟节点
import {h} from 'vue'
// 在render函数中:
return h('div', {}, [
h('span', {}, 'VNode')
])
十、新的组件实现方式
Vue3推荐使用组合式API来实现组件逻辑,我们可以使用setup函数并返回响应式状态:
// MyComponent.vue
import {ref, reactive} from 'vue'
export default {
setup() {
const message = ref('Hello')
const state = reactive({
name: 'John'
})
return {
message,
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/77b73caad1a49c592d870a6e6cf10fbf.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/379e69b8797dc4db24dbb69541c80358.png)
![img](https://img-blog.csdnimg.cn/img_convert/670ddb681a2d5839490287b177deb72f.png)
![img](https://img-blog.csdnimg.cn/img_convert/95b4cfc62eb6b29fb8d584aaaa8e9340.png)
![img](https://img-blog.csdnimg.cn/img_convert/aad0769dbd1a7359191fd7429ebc148a.png)
![img](https://img-blog.csdnimg.cn/img_convert/ac0d8ce43e7806643389f4c0e86bcac2.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)**
![img](https://img-blog.csdnimg.cn/img_convert/f79cbda7271218a8bfe036ccb4ad0a97.png)
### 紧跟潮流
大前端和全栈是以后前端的一个趋势,懂后端的前端,懂各端的前端更加具有竞争力,以后可以往这个方向靠拢。
这边整理了一个对标“阿里 50W”年薪企业高级前端工程师成长路线,由于图片太大仅展示一小部分
![](https://img-blog.csdnimg.cn/img_convert/8f4634e85dd904c95364c9d62e0e9eff.png)
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/9796945df5eda48da5fc944a3604f821.png)
### 紧跟潮流
大前端和全栈是以后前端的一个趋势,懂后端的前端,懂各端的前端更加具有竞争力,以后可以往这个方向靠拢。
这边整理了一个对标“阿里 50W”年薪企业高级前端工程师成长路线,由于图片太大仅展示一小部分
![](https://img-blog.csdnimg.cn/img_convert/8f4634e85dd904c95364c9d62e0e9eff.png)
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-qrfqzC5O-1712869687632)]