Vue3 的组合式 API(Composition API)是 Vue 框架的一次重大升级,它提供了一种全新的方式来组织和复用组件逻辑。本文将深入探讨其最佳实践,帮助你写出更优雅的代码。
为什么选择组合式 API
在 Vue2 中,我们使用选项式 API 来组织代码。随着组件变得复杂,相关的逻辑代码分散在不同的选项(data、methods、computed、watch)中,导致维护困难。
组合式 API 的核心优势在于:按照逻辑关注点组织代码,而不是按照选项类型。
这意味着,一个功能的所有相关代码可以放在一起,而不是分散在组件的各个选项中。这种组织方式在大型组件中尤其有价值。
基础用法
让我们从一个简单的例子开始,了解 setup 函数和响应式 API 的基本用法:
import { ref, computed, onMounted } from 'vue'
export default {
setup() {
const count = ref(0)
const doubled = computed(() => count.value * 2)
function increment() {
count.value++
}
onMounted(() => {
console.log('组件已挂载')
})
return { count, doubled, increment }
}
}
组合式函数(Composables)
组合式 API 最强大的特性之一就是组合式函数。通过它,我们可以将有状态的逻辑提取到独立的函数中,实现跨组件复用。
// useCounter.js
import { ref } from 'vue'
export function useCounter(initialValue = 0) {
const count = ref(initialValue)
function increment() { count.value++ }
function decrement() { count.value-- }
function reset() { count.value = initialValue }
return { count, increment, decrement, reset }
}
实践建议
- 每个组合式函数只关注一个逻辑关注点
- 命名以 use 开头,如 useCounter、useFetch
- 始终返回 ref 而不是 reactive 对象
- 处理好清理逻辑,避免内存泄漏
- 提供清晰的 TypeScript 类型定义
script setup 语法糖
Vue3.2 引入了 <script setup> 语法糖,让组合式 API 的使用更加简洁:
<script setup>
import { ref, computed } from 'vue'
import { useCounter } from './useCounter'
const { count, increment } = useCounter(10)
const message = ref('Hello Vue3!')
const upperMessage = computed(() => message.value.toUpperCase())
</script>
使用 script setup 后,所有顶层的绑定都会自动暴露给模板,无需手动 return。代码量减少了约 40%,同时获得了更好的 TypeScript 类型推导。
性能优化
合理使用 shallowRef、shallowReactive 可以减少深层响应式转换的开销。对于大型列表数据,这一点尤为重要。
同时,善用 watchEffect 的清理函数和 computed 的缓存特性,可以避免不必要的重复计算。
总结
组合式 API 为 Vue 开发带来了更灵活的代码组织方式。掌握这些最佳实践,能让你的 Vue3 项目更加健壮、可维护。记住,好的代码是写给人看的,恰好机器也能执行。