` = 你看到的页面内容
- `
```
**为什么用`
```
**优势:**
- 📦 **高内聚** - 相关代码在一起
- 🔧 **易维护** - 修改功能只需改一个文件
- 🚀 **易复用** - 整个组件可以在其他地方使用
### 🔄 组件拆分建议
你的项目目前是单组件,可以考虑拆分:
```javascript
// 可以拆分成的组件
components/
├── TodoApp.vue // 主容器组件
├── TodoInput.vue // 输入框组件
├── TodoList.vue // 列表组件
├── TodoItem.vue // 单个待办项组件
├── TodoFilter.vue // 过滤器组件
└── TodoFooter.vue // 底部统计组件
```
**组件拆分原则:**
- 🎯 单一职责 - 一个组件做一件事
- 🎯 合理大小 - 不要太大也不要太小
- 🎯 易于理解 - 功能清晰明确
### 📡 组件通信(进阶)
当你拆分组件后,需要组件间通信:
```javascript
// 父组件传数据给子组件 (Props)
// 子组件触发父组件事件 (Emit)
const emit = defineEmits(['toggle'])
emit('toggle', todo.id)
```
---
## 构建与部署
### ⚡ Vite 构建工具
你的项目使用 Vite 作为构建工具:
```javascript
// vite.config.js
export default defineConfig({
plugins: [
vue(), // Vue支持
vueDevTools(), // 开发工具
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
},
},
})
```
**Vite的优势:**
- ⚡ 启动速度快
- ⚡ 热更新快
- ⚡ 构建速度快
- ⚡ 支持现代JavaScript特性
### 🚀 开发和构建命令
```bash
# 开发模式(你正在使用的)
npm run dev
# 构建生产版本
npm run build
# 预览构建结果
npm run preview
```
### 📦 依赖管理
```json
// package.json 中的依赖
{
"dependencies": {
"vue": "^3.5.13" // Vue 3框架
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.2.3", // Vue插件
"vite": "^6.2.4", // 构建工具
"vite-plugin-vue-devtools": "^7.7.2" // 开发工具
}
}
```
---
## 🎓 学习路径和下一步
### 📚 基于你项目的学习顺序
**第1阶段:巩固基础(你已经在用)**
- ✅ 响应式数据 (`ref`)
- ✅ 计算属性 (`computed`)
- ✅ 事件处理 (`@click`, `@keyup`)
- ✅ 条件渲染 (`v-show`)
- ✅ 列表渲染 (`v-for`)
- ✅ 双向绑定 (`v-model`)
**第2阶段:进阶功能**
- 🔄 组件拆分和复用
- 🔄 组件通信 (Props & Emit)
- 🔄 生命周期钩子 (`onMounted`, `onUpdated`)
- 🔄 侦听器 (`watch`, `watchEffect`)
**第3阶段:实用技能**
- 🚀 路由管理 (Vue Router)
- 🚀 状态管理 (Pinia)
- 🚀 HTTP请求 (Axios)
- 🚀 UI组件库 (Element Plus, Ant Design Vue)
### 💪 练习建议
**基于你的项目扩展:**
1. **添加编辑功能** - 双击编辑待办事项
2. **添加优先级** - 给待办事项分优先级
3. **添加分类** - 工作、生活、学习分类
4. **添加截止日期** - 为待办事项设置期限
5. **数据持久化** - 使用 localStorage 保存数据
### 🐛 常见新手错误和解决方案
**1. 忘记 `.value`**
```javascript
// ❌ 错误
const count = ref(0)
console.log(count) // 输出: RefImpl对象
count++ // 不会工作
// ✅ 正确
console.log(count.value) // 输出: 0
count.value++ // 正确的修改方式
```
**2. 直接修改 props**
```javascript
// ❌ 错误 - 不要直接修改父组件传来的数据
props.todo.text = 'new text'
// ✅ 正确 - 通过事件通知父组件
emit('update-todo', { id: props.todo.id, text: 'new text' })
```
**3. 缺少 key 属性**
```html
{{ item.name }}
{{ item.name }}
```
**4. 在计算属性中修改数据**
```javascript
// ❌ 错误
const processedData = computed(() => {
originalData.value.push(newItem) // 不要在计算属性中修改数据
return originalData.value
})
// ✅ 正确
const processedData = computed(() => {
return originalData.value.map(item => ({ ...item, processed: true }))
})
```
### 🛠️ 调试技巧
**1. 使用 Vue DevTools**
在浏览器中安装 Vue DevTools 扩展,可以:
- 查看组件树
- 检查响应式数据
- 追踪事件
**2. 控制台调试**
```javascript
// 在方法中添加调试输出
const addTodo = () => {
console.log('添加前的todos:', todos.value)
console.log('输入的内容:', newTodo.value)
if (newTodo.value.trim()) {
// ... 你的逻辑
}
console.log('添加后的todos:', todos.value)
}
```
**3. 模板调试**
```html
{{ todos }}
当前筛选: {{ filter }}
计算属性结果: {{ filteredTodos }}
```
### 📖 推荐学习资源
**官方文档:**
- [Vue 3 官方文档](https://vuejs.org/)
- [Vue 3 中文文档](https://cn.vuejs.org/)
**实用教程:**
- Vue 3 快速上手
- Composition API 深入理解
- Vue 生态系统指南
**练习项目建议:**
1. 完善当前的待办事项应用
2. 制作一个简单的计算器
3. 开发一个天气查询应用
4. 创建一个个人博客系统
---
## 🎉 总结
恭喜你!你的待办事项项目已经使用了Vue 3的核心特性:
**✅ 你已经掌握的:**
- Composition API (`