引言:为什么选择Composition API?
Vue3带来的Composition API彻底改变了我们组织Vue组件逻辑的方式。相比Options API,它提供了更灵活的逻辑组织和复用能力,特别是在处理复杂组件时。
在本教程中,我们将通过构建一个功能完整的任务管理器应用,深入探索Composition API的核心特性:
- 响应式状态管理(ref, reactive)
- 计算属性(computed)
- 方法(methods)
- 生命周期钩子(onMounted)
- 组件逻辑复用(composables)
项目初始化
首先创建一个新的Vue3项目:
npm create vue@latest
cd vue-task-manager
npm install
npm run dev
我们将使用Composition API的setup语法糖,它使代码更简洁:
<script setup>
// 这里编写Composition API代码
</script>
核心概念:响应式状态管理
Vue3提供了两种创建响应式数据的主要方法:
1. ref()
用于基本类型值(字符串、数字、布尔值)
import { ref } from 'vue'
const taskTitle = ref('')
const taskCount = ref(0)
2. reactive()
用于对象类型数据,保持对象内部属性的响应性
import { reactive } from 'vue'
const task = reactive({
id: 1,
title: '学习Vue3',
completed: false
})
任务管理器实战开发
下面是我们将要构建的任务管理器的核心功能:
添加新任务
任务列表
-
{{ task.title }}
- 暂无任务,请添加新任务!
总任务: {{ totalTasks }} | 剩余: {{ activeTasksCount }} | 已完成: {{ completedTasksCount }}
代码解析:Composition API实现
1. 响应式状态定义
import { ref, reactive, computed, onMounted } from 'vue'
// 任务列表
const tasks = ref([])
// 新任务输入
const newTask = ref('')
// 过滤条件
const filter = ref('all')
// 模拟从API加载初始数据
onMounted(() => {
tasks.value = [
{ id: 1, title: '学习Vue3基础', completed: true },
{ id: 2, title: '掌握Composition API', completed: false },
{ id: 3, title: '构建实际项目', completed: false }
]
})
2. 计算属性
// 计算过滤后的任务
const filteredTasks = computed(() => {
switch (filter.value) {
case 'active':
return tasks.value.filter(task => !task.completed)
case 'completed':
return tasks.value.filter(task => task.completed)
default:
return tasks.value
}
})
// 任务统计
const totalTasks = computed(() => tasks.value.length)
const completedTasksCount = computed(() =>
tasks.value.filter(t => t.completed).length
)
const activeTasksCount = computed(() =>
totalTasks.value - completedTasksCount.value
)
3. 操作方法
// 添加新任务
function addTask() {
if (newTask.value.trim() === '') return
tasks.value.push({
id: Date.now(),
title: newTask.value.trim(),
completed: false
})
newTask.value = ''
}
// 删除任务
function removeTask(id) {
tasks.value = tasks.value.filter(task => task.id !== id)
}
最佳实践:逻辑复用
Composition API的核心优势之一是逻辑复用。我们可以将任务管理逻辑提取到可组合函数中:
// useTaskManager.js
import { ref, computed } from 'vue'
export default function useTaskManager(initialTasks = []) {
const tasks = ref(initialTasks)
const filter = ref('all')
const filteredTasks = computed(() => {
// 过滤逻辑
})
const taskStats = computed(() => {
// 统计逻辑
})
function addTask(title) {
// 添加任务
}
function removeTask(id) {
// 删除任务
}
return {
tasks,
filter,
filteredTasks,
taskStats,
addTask,
removeTask
}
}
在组件中使用:
<script setup>
import useTaskManager from '@/composables/useTaskManager'
const {
tasks,
filter,
filteredTasks,
taskStats,
addTask,
removeTask
} = useTaskManager()
</script>
这种模式使我们的组件逻辑更清晰,同时实现了业务逻辑的复用。
总结
通过这个实战项目,我们学习了:
- 使用ref和reactive创建响应式状态
- 利用computed创建基于状态的计算属性
- 在setup中定义和使用方法
- 使用生命周期钩子初始化数据
- 使用组合函数实现逻辑复用
Composition API为Vue开发提供了更强大、更灵活的工具集。随着项目的复杂化,你会越来越体会到它在代码组织和逻辑复用方面的优势。
现在,你可以尝试扩展这个任务管理器:添加任务分类、截止日期、本地存储持久化等功能,进一步巩固所学知识!