为什么选择 Composition API
Composition API 通过函数组合拆分逻辑,让跨组件复用与单测更简单;同时与 TypeScript 更契合,利于类型推断与约束。
基础用法
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue'
const count = ref(0)
const double = computed(() => count.value * 2)
function inc(){ count.value++ }
onMounted(() => console.log('mounted'))
</script>
<template>
<button @click="inc">{{ double }}</button>
</template>提取可复用逻辑
// useMouse.ts
import { ref, onMounted, onUnmounted } from 'vue'
export function useMouse(){
const x = ref(0), y = ref(0)
const move = (e: MouseEvent) => { x.value = e.pageX; y.value = e.pageY }
onMounted(() => window.addEventListener('mousemove', move))
onUnmounted(() => window.removeEventListener('mousemove', move))
return { x, y }
}性能与可维护性
- 按需响应:避免为大对象深层响应式,可用
shallowRef/markRaw。 - 只读暴露:通过
readonly暴露状态,防止外部误改。 - 解耦依赖:使用
provide/inject传递跨层数据,避免层层 props。
总结
在复杂组件中优先使用 Composition API,结合组合式函数沉淀领域能力;在简单组件保留 Options API,保持心智与迁移成本可控。