Vue 3 中的 Composition API 详解
Vue 3 引入了 Composition API,这是一种新的方式来组织和管理组件的逻辑。它与 Vue 2 中的 Options API 不同,允许开发者以更灵活和可组合的方式构建组件。本文将深入探讨 Composition API 的概念、用法、优势及其与 Options API 的对比。
目录
- 什么是 Composition API
- 基本用法
- 2.1
setup
函数 - 2.2 响应式状态
- 2.3 计算属性
- 2.4 侦听器
- 2.1
- 使用 Composition API 的优势
- 与 Options API 的对比
- 实际示例
- 最佳实践与注意事项
- 总结
什么是 Composition API
Composition API 是一种新的 API 设计,旨在提高 Vue 组件的逻辑复用性和可读性。它允许开发者将组件的逻辑拆分为多个函数,而不是将所有逻辑集中在一个对象中。
基本用法
2.1 setup
函数
在使用 Composition API 时,组件的主要逻辑在 setup
函数中定义。setup
函数在组件实例创建之前执行,并且可以接收 props
和 context
作为参数。
<script>
import { ref } from 'vue';export default {setup(props, context) {const message = ref('Hello, Composition API!');return {message};}
};
</script>
2.2 响应式状态
使用 ref
和 reactive
来创建响应式状态。
ref
用于基本数据类型的响应式状态。reactive
用于对象或数组的响应式状态。
import { ref, reactive } from 'vue';export default {setup() {const count = ref(0);const state = reactive({ name: 'Vue 3' });return {count,state};}
};
2.3 计算属性
使用 computed
来创建计算属性,类似于 Options API 中的计算属性。
import { ref, computed } from 'vue';export default {setup() {const count = ref(0);const doubled = computed(() => count.value * 2);return {count,doubled};}
};
2.4 侦听器
使用 watch
来侦听响应式状态的变化。
import { ref, watch } from 'vue';export default {setup() {const count = ref(0);watch(count, (newValue) => {console.log(`Count changed to: ${newValue}`);});return {count};}
};
使用 Composition API 的优势
- 逻辑复用:可以通过组合函数(composable functions)来提取和复用逻辑。
- 更好的类型推导:TypeScript 用户可以获得更好的类型推导和 IntelliSense 支持。
- 更清晰的组织:逻辑可以根据功能或关注点进行组织,而不是在组件选项中分散。
- 更灵活的 API:允许更灵活的组合和组合组件逻辑。
与 Options API 的对比
结构
- Options API:所有逻辑集中在一个对象中,使用
data
、methods
、computed
等选项。 - Composition API:逻辑可以分散在多个函数中,使用
setup
函数进行组织。
逻辑复用
- Options API:逻辑复用通常依赖于混入(mixins)和插槽,可能导致命名冲突和难以追踪。
- Composition API:可以创建可重用的组合函数,逻辑复用更清晰。
类型支持
- Options API:对 TypeScript 支持较弱,类型推导不够灵活。
- Composition API:提供更好的 TypeScript 支持和类型推导。
实际示例
以下是一个简单的 Vue 3 组件示例,展示了如何使用 Composition API。
<template><div><h1>{{ message }}</h1><button @click="increment">Increment</button><p>Count: {{ count }}</p><p>Doubled: {{ doubled }}</p></div>
</template><script>
import { ref, computed } from 'vue';export default {setup() {const message = ref('Hello, Composition API!');const count = ref(0);const increment = () => {count.value++;};const doubled = computed(() => count.value * 2);return {message,count,increment,doubled};}
};
</script>
最佳实践与注意事项
- 组合函数:将逻辑提取到组合函数中,以便于复用和测试。
- 命名清晰:命名组合函数时要清晰,以便于其他开发者理解。
- 避免过度使用:尽量避免将所有逻辑都放入
setup
中,保持逻辑的清晰和简洁。
总结
Composition API 是 Vue 3 的一项重要改进,使得组件的逻辑更加灵活和可组合。通过使用 setup
函数、响应式状态、计算属性和侦听器,开发者可以以更清晰的方式组织组件逻辑。