Vue 组合式 API
组合式 API (Composition API) 是 Vue 3 中引入的一套新的、函数式的 API。它旨在解决 Vue 2 中选项式 API (Options API) 在大型应用中遇到的一些问题,例如逻辑分散、难以复用等。组合式 API 允许我们更灵活地组织和复用组件逻辑。
什么是组合式 API?
组合式 API 的核心思想是将与同一个逻辑功能相关的代码(如状态、方法、计算属性、监听器等)组织在一起,而不是按照选项(data, methods, computed)来拆分它们。
这种方式使得代码更易于阅读和维护,尤其是在组件变得复杂时。它还使得逻辑复用变得非常简单和直观。
setup 函数
组合式 API 的入口点是 setup 函数。在 Vue 3 的单文件组件中,我们通常直接使用 <script setup> 语法,它本质上是 setup 函数的语法糖。
在 <script setup> 中:
- 所有顶级绑定(变量、函数声明)都会自动暴露给模板。
- 我们可以直接使用从
vue中导入的 API,如ref,reactive,computed,watch, 以及生命周期钩子。
核心 API 概览
ref 和 reactive
用于创建响应式数据。
ref(): 接收一个内部值,返回一个响应式的、可变的 ref 对象。这个对象有一个.value属性,指向内部值。通常用于创建基本类型(字符串、数字、布尔值)的响应式变量。reactive(): 返回一个对象的响应式代理。它会“深度”地转换对象,所有嵌套的 property 都是响应式的。通常用于创建响应式对象。
computed
用于创建计算属性。它接收一个 getter 函数,并返回一个不可变的响应式 ref 对象。
watch 和 watchEffect
用于在数据变化时执行副作用。
watch: 精确地监听一个或多个数据源,并在它们变化时执行回调。它是惰性的,并可以访问新旧值。watchEffect: 立即执行一个函数,并响应式地追踪其依赖,在依赖变更时重新运行。
生命周期钩子
组合式 API 提供了一系列与组件生命周期事件相对应的函数,如 onMounted, onUpdated, onUnmounted 等。它们接收一个回调函数,在组件的相应生命周期阶段被调用。
优势总结
- 更好的逻辑组织:可以将相关功能的代码放在一起,而不是被迫按选项分割。
- 更好的类型推断:组合式 API 主要使用普通变量和函数,对 TypeScript 非常友好。
- 更灵活的逻辑复用:可以轻松地将任何逻辑(状态、方法等)提取到可复用的“组合式函数”(Composables) 中,并在多个组件中使用。