Vue 3 的 Composition API 提供了更灵活的组件逻辑组织方式。本文通过一个完整的项目案例,展示如何使用 Composition API 构建可维护的 Vue 应用。
什么是 Composition API?
Composition API 是 Vue 3 中引入的一组 API,它允许我们使用函数的方式组织和重用组件逻辑。与 Options API 相比,Composition API 提供了更好的逻辑复用性和代码组织性。
为什么使用 Composition API?
在 Vue 2 的 Options API 中,随着组件功能的增加,代码会变得越来越复杂,逻辑分散在 data、methods、computed 等选项中,难以维护。Composition API 通过将相关逻辑组织在一起,解决了这个问题。
基础用法
<template>
<div>
<p>{{ message }}</p>
<button @click="updateMessage">Update Message</button>
</div>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const message = ref('Hello Vue 3!')
const updateMessage = () => {
message.value = 'Message Updated!'
}
return {
message,
updateMessage
}
}
}
</script>
响应式数据
Vue 3 提供了 reactive 和 ref 两种方式来创建响应式数据。reactive 用于创建响应式对象,ref 用于创建响应式的基本类型值。
计算属性和监听器
<script>
import { ref, computed, watch } from 'vue'
export default {
setup() {
const count = ref(0)
const doubledCount = computed(() => count.value * 2)
watch(count, (newVal, oldVal) => {
console.log(`count changed from ${oldVal} to ${newVal}`)
})
return {
count,
doubledCount
}
}
}
</script>
生命周期钩子
Composition API 中的生命周期钩子与 Options API 中的钩子相对应,但名称前加上了 on 前缀。
<script>
import { onMounted, onUpdated, onUnmounted } from 'vue'
export default {
setup() {
onMounted(() => {
console.log('Component is mounted!')
})
onUpdated(() => {
console.log('Component is updated!')
})
onUnmounted(() => {
console.log('Component is unmounted!')
})
}
}
</script>
自定义 Hook
通过自定义 Hook,可以将组件逻辑提取到可重用的函数中。
// useCounter.js
import { ref } from 'vue'
export function useCounter() {
const count = ref(0)
const increment = () => {
count.value++
}
const decrement = () => {
count.value--
}
return {
count,
increment,
decrement
}
}
在组件中使用自定义 Hook
<template>
<div>
<p>Count: {{ count }}</p>
<button @click="increment">+</button>
<button @click="decrement">-</button>
</div>
</template>
<script>
import { useCounter } from './useCounter'
export default {
setup() {
const { count, increment, decrement } = useCounter()
return {
count,
increment,
decrement
}
}
}
</script>
结论
Composition API 为 Vue 3 带来了更灵活和强大的功能,使得组件逻辑的组织和复用变得更加容易。通过合理使用 Composition API,我们可以写出更简洁、更易于维护的代码。