Vue3组合式API实战教程:告别Options API的繁琐,代码复用性暴涨
·
前言
Vue3 引入的组合式 API(Composition API)彻底改变了组件逻辑的组织方式。相比于 Vue2 的 Options API(data、methods、computed 分块),组合式 API 允许我们按逻辑关注点聚合代码,让复杂组件的可读性和复用性大幅提升。本文会用 5 个对比案例带你快速上手。
一、核心概念
setup:组件中组合式 API 的入口,在 beforeCreate 之前执行
ref:包装基本类型为响应式对象,访问时需 .value
reactive:包装对象/数组,直接访问属性即可
computed:计算属性
watch/watchEffect:侦听数据变化
二、代码对比:计数器(最简单的迁移)
Options API 写法
<template>
<button @click="increment">count: {{ count }}</button>
</template>
<script>
export default {
data() {
return { count: 0 }
},
methods: {
increment() { this.count++ }
}
}
</script>
Composition API 写法
<template>
<button @click="increment">count: {{ count }}</button>
</template>
<script setup>
import { ref } from 'vue'
const count = ref(0)
const increment = () => { count.value++ }
</script>
三、实战:用户信息表单(逻辑分离)
<template>
<div>
<input v-model="form.name" placeholder="姓名">
<input v-model="form.email" placeholder="邮箱">
<p>校验结果:{{ validationMsg }}</p>
</div>
</template>
<script setup>
import { reactive, computed, watch } from 'vue'
// 响应式表单数据
const form = reactive({
name: '',
email: ''
})
// 计算属性:实时校验
const validationMsg = computed(() => {
if (!form.name) return '请填写姓名'
if (!form.email.includes('@')) return '邮箱格式不正确'
return '信息完整'
})
// 侦听表单变化,模拟保存草稿
watch(form, (newVal) => {
console.log('表单变化:', newVal)
// 可调用接口保存草稿
}, { deep: true })
</script>
四、逻辑复用(Composables)—— 最大的优势
假设多个组件都需要获取鼠标位置,传统 mixins 容易有命名冲突,而组合式 API 可以抽离成独立函数:
useMousePosition.js
import { ref, onMounted, onUnmounted } from 'vue'
export function useMousePosition() {
const x = ref(0)
const y = ref(0)
const update = (e) => {
x.value = e.pageX
y.value = e.pageY
}
onMounted(() => window.addEventListener('mousemove', update))
onUnmounted(() => window.removeEventListener('mousemove', update))
return { x, y }
}
在组件中使用
<template>
<div>鼠标位置:{{ x }}, {{ y }}</div>
</template>
<script setup>
import { useMousePosition } from './useMousePosition'
const { x, y } = useMousePosition()
</script>
五、生命周期映射
Options API Composition API (在 setup 中)
created 直接写(setup 本身执行时)
mounted onMounted(() => {})
updated onUpdated(() => {})
unmounted onUnmounted(() => {})
总结
组合式 API 不是要完全替代 Options API,而是在组件逻辑复杂时提供更好的组织方式。建议新项目直接使用
更多推荐

所有评论(0)