CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Vue 3 核心/课时/综合练习
RawBlame
课时目录12 节

Vue 3 核心

  1. 01Vue 是什么
  2. 02项目创建与 SFC
  3. 03模板语法
  4. 04响应式基础
  5. 05组件与 Props
  6. 06计算属性与侦听
  7. 07组合式 API 深入
  8. 08Vue Router
  9. 09Pinia 状态管理
  10. 10数据获取
  11. 11构建与部署
  12. 12综合练习

综合练习

迷你 Todo + 路由 + Pinia。

40 分钟

综合练习

这一课你将能做到

  1. 独立完成「Todo + Router + Pinia + 三态 fetch」迷你应用并 npm run build 通过
  2. 用自己的话写一段 Vue 与 React 实现同一 Todo 的差异(200 字级)
  3. 明确收官后:Vue 路线图可打勾,本站主产品代码仍回 Next/React

为什么要学

零件课过完不等于会组装。综合练习强迫你做选择:状态放组件还是 Pinia、详情要不要独立路由、列表要不要远程加载。
做完后,读 Element Admin 一类项目会轻松很多。

先建立图像

/                列表 + 筛选 + 新增(Pinia)
/todo/:id        详情编辑
可选 /api/todos  初始加载(三态)
localStorage     持久化
npm run build    验收
验收项标准
路由直达 /todo/1 不白屏
状态刷新后列表仍在(若做了持久化)
远程有 loading/error(若接 API)
构建build 成功

跟着做

步骤 1:搭路由

routes: [
  { path: "/", component: TodoList },
  { path: "/todo/:id", component: TodoDetail },
]

App.vue 放导航与 RouterView。

步骤 2:Pinia store

沿用 pinia 课骨架:items/filter/visible/add/toggle,再补:

function update(id, text) {
  const row = items.value.find((x) => x.id === id);
  if (row) row.text = text;
}

function hydrate() {
  const raw = localStorage.getItem("vue-todo");
  if (raw) items.value = JSON.parse(raw);
}

watch(items, (v) => localStorage.setItem("vue-todo", JSON.stringify(v)), {
  deep: true,
});

应用启动时 hydrate()。

步骤 3:列表页

<script setup>
import { storeToRefs } from "pinia";
import { useTodoStore } from "@/stores/todo";
import { RouterLink } from "vue-router";

const store = useTodoStore();
const { visible, filter } = storeToRefs(store);
</script>

<template>
  <input
    @keyup.enter="
      store.add($event.target.value);
      $event.target.value = '';
    "
  />
  <button
    v-for="f in ['all', 'active', 'done']"
    :key="f"
    type="button"
    @click="filter = f"
  >
    {{ f }}
  </button>
  <ul>
    <li v-for="t in visible" :key="t.id">
      <input type="checkbox" :checked="t.done" @change="store.toggle(t.id)" />
      <RouterLink :to="`/todo/${t.id}`">{{ t.text }}</RouterLink>
    </li>
  </ul>
</template>

步骤 4:详情页

用 useRoute().params.id 找到 item;找不到显示「不存在」并链回首页。
编辑标题调用 store.update。

步骤 5:可选远程种子数据

onMounted(async () => {
  if (store.items.length) return;
  // fetch mock / Boot API,写入 store;处理三态
});

无后端时用本地 mock JSON 也行,但在笔记标明「mock 边界」。

步骤 6:构建与对比文

npm run build && npm run preview

写短文:模板 vs JSX、ref vs useState、Pinia vs Context、Vue Router vs Next 路由。
交卷标准:自己能讲清,不是粘贴官方广告语。

讲清楚要点

  1. 先跑通闭环再加花样:鉴权、拖拽可后加。
  2. id 类型:路由参数是字符串,=== 时注意转换。
  3. 持久化与远程冲突:要想好「谁覆盖谁」。
  4. 组件拆分:列表项、筛选条可拆,避免单文件过千行。
  5. 主站技术栈不变:练习仓库独立;platform 仍 React/Next + Spring。
  6. 路线图:完成后到 frontend 路线图 Vue 相关节点确认链接。

你可能会懵的地方

  • 详情页刷新丢了?
    检查 hydrate 是否在 router 就绪前执行;store 是否单例。

  • @ 别名失败?
    看 vite/tsconfig 路径;改相对路径也能交卷。

  • 和 React Todo 作业重复?
    有意为之——迁移练习最值钱。

  • 要不要 TypeScript?
    加分项;interface TodoItem 可对照 TS 课。

  • Nuxt 要现在上吗?
    不必。核心收官即可。

错法对照

错法问题正解
只做列表不做路由未达综合补详情页
解构 store 丢响应筛选失灵storeToRefs
构建失败仍称完成假完成修到 build 绿
把练习合并进 platform栈污染独立目录
对比文只写「都很好」无迁移收获写具体 API 对应
无错误态就接 API一挂就白屏三态

自测三问

  1. 本综合练习强制串联了哪些能力?
  2. 直开 /todo/:id 时数据从哪来?
  3. 学完 Vue track 后,本站产品代码应回到哪条技术栈?

小结一句话

Vue track 收官:SFC + 响应式 + Router + Pinia + 取数构建;主栈请回 Next.js + React + Spring Boot。

官方延伸

  • Vue 官方示例
  • 本站对照:React 核心、Next.js 核心
  • 路线图:/roadmaps/frontend
加载本节练习…
← 上一课构建与部署