Vue 3 核心特性与主要 API 总结
Vue3核心特性及改进总结:Vue3采用Proxy重构响应式系统,引入组合式API(Composition API)优化逻辑组织,支持TypeScript类型检查。相比Vue2的主要改进包括:性能提升(静态提升、懒编译)、更好的逻辑复用(替代Mixin)、新组件特性(Fragment、Teleport)等。核心API包括ref/reactive响应式数据、setup函数、生命周期钩子、计算属性等,
一、Vue3 核心特性
总结一下Vue3的核心特性,Vue3的响应式使用 Proxy 重构响应式系统,虽然需要使用ref和reactive,但是整体还是好用一些。运行和打包通过 Tree-Shaking 提升性能,感官上来说性能是提升了很多。支持了 TypeScript ,刚接触前端开发的时候就觉得类型怎么可以随便切换,是弱类型语言,现在相当于多了一个属性的声明限制了类型,方便检查类型的错误。还有一些新的API也挺好用的如 Teleport、Suspense 等。
二、Vue3 与 Vue2 关键差异对比
| 对比维度 | Vue2 | Vue3 |
|---|---|---|
| 核心架构 | 选项式 API(Options API) | 组合式 API(Composition API)为主,兼容选项式 |
| 响应式系统 | Object.defineProperty 劫持 | Proxy 代理(深层响应式、性能更优) |
| 组件实例 | 基于 Class 实现 | 基于函数式 API 实现(setup 函数) |
| 性能优化 | 无静态提升、全量编译 | 自动静态提升(Hoisting)、懒编译(Lazy Compilation) |
| 组件结构 | 必须有单个根节点 | 支持 Fragment(多根节点)、Teleport 组件 |
| API 设计 | 全局 API 直接挂载(Vue.xxx) | 模块化 API(createApp 等) |
| 逻辑复用 | Mixin(可能导致命名冲突) | Composition API(函数式复用,更清晰) |
三、Vue3 核心特性与重要 API 详解
1. Composition API:重构组件逻辑组织方式
核心思想:通过函数将相关逻辑抽离为可复用单元,解决 Vue2 中选项式 API 逻辑分散的问题。
<!-- Vue3 组件示例:Composition API 基础用法 -->
<template>
<div>
<h3>计数器:{{ count }}</h3>
<button @click="increment">+1</button>
</div>
</template>
<script>
import { ref, reactive, onMounted } from 'vue'
export default {
setup() {
// 响应式数据:ref 用于基本类型,返回带 .value 的包装对象
const count = ref(0)
// 响应式数据:reactive 用于对象类型,直接代理对象
const state = reactive({
message: 'Hello Vue3'
})
// 方法
const increment = () => {
count.value++
}
// 生命周期钩子:onMounted 替代 mounted
onMounted(() => {
console.log('组件已挂载')
})
// 暴露给模板的数据和方法
return {
count,
state,
increment
}
}
}
</script>
2. 响应式系统升级:基于 Proxy 的高效响应式
- ref 与 reactive 的区别
ref():适用于基本类型(如 number、string),返回一个带.value属性的响应式对象。reactive():适用于对象 / 数组,直接返回代理后的响应式对象。
// 示例:ref 与 reactive 的使用场景
import { ref, reactive } from 'vue'
// 基本类型用 ref
const num = ref(10)
num.value++ // 修改值
// 对象类型用 reactive
const user = reactive({ name: 'Vue3', age: 3 })
user.age++ // 直接修改属性
3. 生命周期钩子:在 setup 中使用组合式钩子
| Vue2 钩子 | Vue3 组合式钩子(在 setup 中使用) |
|---|---|
| beforeCreate | 无(setup 执行在 beforeCreate 前) |
| created | 无(setup 执行在 created 前) |
| beforeMount | onBeforeMount |
| mounted | onMounted |
| beforeUpdate | onBeforeUpdate |
| updated | onUpdated |
| beforeDestroy | onBeforeUnmount |
| destroyed | onUnmounted |
| errorCaptured | onErrorCaptured |
<script>
import { onMounted, onBeforeUnmount } from 'vue'
export default {
setup() {
// 组件挂载后执行
onMounted(() => {
console.log('组件已挂载到 DOM')
})
// 组件卸载前执行(如清理定时器)
onBeforeUnmount(() => {
console.log('组件即将卸载')
})
return {}
}
}
</script>
4. 计算属性与监听器:API 用法优化
<template>
<div>
<p>原始值:{{ count }}</p>
<p>双倍值:{{ doubleCount }}</p>
<button @click="count++">+1</button>
</div>
</template>
<script>
import { ref, computed, watch, watchEffect } from 'vue'
export default {
setup() {
const count = ref(0)
// 计算属性:与 Vue2 用法类似,但通过 computed 函数创建
const doubleCount = computed(() => count.value * 2)
// 普通监听器:watch 接收源、回调、选项
watch(
count,
(newVal, oldVal) => {
console.log(`count 变化:${oldVal} -> ${newVal}`)
}
)
// 响应式副作用:watchEffect 自动追踪依赖
watchEffect(() => {
console.log(`count 最新值:${count.value}`)
})
return {
count,
doubleCount
}
}
}
</script>
5. 性能优化:静态提升与懒编译
- 静态提升(Hoisting):Vue3 会自动将不依赖响应式数据的节点提升为静态节点,减少重新渲染开销。
- 懒编译(Lazy Compilation):只编译需要更新的组件部分,而非全量编译。
<!-- 静态节点示例:Vue3 会自动标记为 static -->
<template>
<div>
<!-- 以下节点不依赖响应式数据,会被静态提升 -->
<h1>标题</h1>
<p>静态文本</p>
<!-- 依赖响应式数据的节点仍会保持动态 -->
<p>动态文本:{{ message }}</p>
</div>
</template>
6. 新组件特性:Fragment 与 Teleport
- Fragment:允许组件无单个根节点,直接返回多个节点。
- Teleport:将组件内容渲染到 DOM 树的其他位置(如模态框挂载到 body)。
<!-- Fragment 示例:组件返回多个根节点 -->
<template>
<header>页面头部</header>
<main>
<slot />
</main>
<footer>页面底部</footer>
</template>
<!-- Teleport 示例:将模态框渲染到 body 下 -->
<template>
<button @click="showModal = true">打开模态框</button>
<teleport to="body">
<div v-if="showModal" class="modal">
<div class="modal-content">
模态框内容
<button @click="showModal = false">关闭</button>
</div>
</div>
</teleport>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const showModal = ref(false)
return { showModal }
}
}
</script>
7. 全局 API 变化:模块化设计
// Vue2 全局 API 用法
import Vue from 'vue'
Vue.component('my-component', { /* ... */ })
Vue.use(MyPlugin)
// Vue3 全局 API 用法(通过 createApp)
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.component('my-component', { /* ... */ })
app.use(MyPlugin)
app.mount('#app')
四、Vue3 迁移建议
- 逻辑重构:将 Vue2 中的选项式逻辑逐步迁移至 Composition API,通过
setup函数组织代码。 - 响应式适配:基本类型用
ref,对象类型用reactive,避免直接修改this。 - 生命周期调整:使用组合式钩子(如
onMounted)替代选项式钩子。 - 性能优化:利用静态提升特性,将不动态更新的节点标记为静态。
通过以上特性与 API 的详解,可清晰看到 Vue3 在开发体验、性能优化和代码可维护性上的显著提升,尤其适合中大型项目的架构设计与逻辑复用。Vue3 是 Vue.js 框架的第三代版本,于 2020 年 9 月发布。它带来了一系列重大改进,包括性能提升、更好的 TypeScript 支持和更灵活的组件逻辑组织方式。与 Vue2 相比,Vue3 主要有以下核心特性:
- 组合式 API:提供了一种更灵活的方式来组织和复用组件逻辑,解决了 Vue2 中选项式 API 的 “大型组件复杂性” 问题。
- 更好的 TypeScript 支持:组合式 API 的设计从根本上就支持 TypeScript,减少了类型声明的复杂度。
- 性能优化:虚拟 DOM 重写、编译时优化和按需加载,使 Vue3 在初始化、更新和内存占用方面都有显著提升。
- SFC 语法增强:新增了
<script setup>语法糖,简化了组合式 API 的使用。 - Composition API:提供了
reactive、ref、computed等函数,使状态管理更加灵活。 - Teleport:允许将组件内容渲染到 DOM 中的其他位置。
- Suspense:支持异步组件的优雅加载状态管理。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)