从零搭建你的第一个 Vue.js 全栈应用:实战经验全分享
大家好,我是小林,一名211高校的计算机专业研究生,也是一名坚持写技术博客三年的前端讲师。最近很多学弟学妹问我:“Vue 到底怎么学?网上教程太多,看得眼花缭乱。”我当初学的时候也是一头雾水——文档讲得抽象,视频又跳步骤,连 npm install 都能卡半天。
所以今天,我想用最接地气的方式,带你从零开始深度探索 Vue.js 生态系统,并亲手完成一个前后端打通的小项目。不讲空话,只给实战经验,顺便聊聊面试常被问到的对比题(比如 Vue 和 React 到底有啥区别?)。
一、Vue.js 是什么?能用来做什么?
简单说,Vue.js 是一个用于构建用户界面的 JavaScript 框架。你可以用它开发单页面应用(SPA)、管理复杂的交互逻辑,甚至和后端配合做完整的 Web 项目。
- 优势:上手快、文档友好、生态成熟
- 典型场景:后台管理系统、电商前台、数据看板等
- 与 React 对比:Vue 更“约定优于配置”,React 更灵活但学习曲线陡峭(后面会详细对比)
我当初第一次用 Vue,只写了 10 行代码就实现了数据双向绑定,那种“哇”的感觉至今难忘!
二、环境准备:5 分钟搞定开发工具链
我们使用最新的 Vue 3 + Vite 组合,速度快、配置少。
步骤清单:
# 1. 确保已安装 Node.js(建议 v18+)
node -v
# 2. 创建项目
npm create vue@latest my-vue-app
# 3. 进入目录并安装依赖
cd my-vue-app
npm install
# 4. 启动开发服务器
npm run dev
打开浏览器访问 http://localhost:5173,看到欢迎页面就成功了!
⚠️ 常见坑:如果卡在
install,试试换源:npm config set registry https://registry.npmmirror.com
三、核心概念:用最简单的语言讲清楚
1. 响应式数据(Reactivity)
Vue 的核心魔法!数据变了,页面自动更新。
<script setup>
import { ref } from 'vue'
const count = ref(0) // 响应式变量
const increment = () => {
count.value++ // 注意:ref 变量要用 .value 修改
}
</script>
<template>
<div>当前计数:{{ count }}</div>
<button @click="increment">+1</button>
</template>
2. 组件化开发
把页面拆成小积木,比如 <Header />、<TodoList />。
<!-- TodoItem.vue -->
<template>
<li>{{ text }}</li>
</template>
<script setup>
defineProps(['text']) // 接收父组件传来的数据
</script>
3. 路由(Vue Router)
实现多页面跳转,不用刷新。
// router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import Home from '@/views/Home.vue'
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: () => import('@/views/About.vue') }
]
export default createRouter({
history: createWebHistory(),
routes
})
4. 状态管理(Pinia)
当多个组件需要共享数据时(比如用户登录状态),用 Pinia。
// stores/user.js
import { defineStore } from 'pinia'
export const useUserStore = defineStore('user', {
state: () => ({
name: '小林',
isLoggedIn: false
}),
actions: {
login() {
this.isLoggedIn = true
}
}
})
四、实战项目:做一个简易待办事项(Todo List)并对接后端
我们将完成一个能增删查的 Todo 应用,并模拟调用后端 API。
第一步:创建组件结构
src/
├── views/
│ └── TodoView.vue
├── components/
│ └── TodoItem.vue
└── api/
└── todo.js
第二步:模拟后端接口(用 Mock)
实际项目中,后端会提供 RESTful API。这里我们用 mockjs 模拟:
// api/todo.js
const todos = [
{ id: 1, text: '学习 Vue', done: false }
]
export const getTodos = () => Promise.resolve(todos)
export const addTodo = (text) => {
const newTodo = { id: Date.now(), text, done: false }
todos.push(newTodo)
return Promise.resolve(newTodo)
}
📌 真实项目中,你会用
axios调用http://your-api.com/todos
第三步:编写 TodoView.vue
<script setup>
import { ref, onMounted } from 'vue'
import { getTodos, addTodo } from '@/api/todo'
import TodoItem from '@/components/TodoItem.vue'
const todos = ref([])
const newTodoText = ref('')
onMounted(async () => {
todos.value = await getTodos()
})
const handleAdd = async () => {
if (!newTodoText.value.trim()) return
const newTodo = await addTodo(newTodoText.value)
todos.value.push(newTodo)
newTodoText.value = ''
}
</script>
<template>
<div>
<h1>我的待办清单</h1>
<input v-model="newTodoText" @keyup.enter="handleAdd" placeholder="输入任务..." />
<button @click="handleAdd">添加</button>
<ul>
<TodoItem v-for="todo in todos" :key="todo.id" :todo="todo" />
</ul>
</div>
</template>
第四步:运行并测试
保存后,浏览器自动刷新。输入任务、回车,就能看到新条目!这就是前后端协作的基本流程。
五、新手高频问题 & 避坑指南
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 页面不更新 | 直接修改数组/对象属性 | 用 ref / reactive,或使用 $set(Vue 2) |
| 组件不显示 | 忘记注册或导入 | 检查 components 是否注册,路径是否正确 |
| API 调用失败 | 跨域(CORS) | 后端需允许跨域,或开发时用代理(Vite 支持) |
ref 取值为 undefined |
在模板外忘了 .value |
在 <script> 中操作 ref 必须加 .value |
💡 我当初调试三天才发现是
count++写成了count.value = count + 1,其实直接count.value++就行!
六、Vue vs React:面试题挑战常见对比
很多同学在面试会被问:“Vue 和 React 有什么区别?” 结合我的实战经验,总结如下:
| 维度 | Vue | React |
|---|---|---|
| 学习曲线 | 平缓,模板语法直观 | 较陡,JSX 需适应 |
| 数据流 | 响应式自动追踪依赖 | 手动 setState / useState 触发更新 |
| 生态工具 | 官方提供 Router、状态库(Pinia) | 社区方案多(React Router、Redux/Zustand) |
| 适用场景 | 快速交付、中小型项目 | 大型复杂应用、高度定制需求 |
✅ 建议:先掌握一个框架,再横向对比。Vue 入门更快,React 生态更广。
七、下一步学习建议
- 深入响应式原理:了解
Proxy如何实现数据劫持 - 学习 TypeScript + Vue:大型项目必备
- 尝试部署上线:用 Vercel 或 Netlify 一键部署前端
- 连接真实后端:用 Node.js + Express 写个简单 API
- 刷面试题:重点准备“组件通信”、“生命周期”、“性能优化”
我的博客里有配套的 GitHub 仓库,包含完整 Todo 项目代码和部署脚本,欢迎取用!
结语
Vue.js 不只是一个框架,而是一整套高效开发的解决方案。从写第一个 {{ message }} 到独立负责全栈项目,你只需要持续动手实践。
记住:没有“学不会”,只有“没练够”。现在就打开终端,跑一遍 npm create vue@latest 吧!
如果你觉得这篇教程帮到了你,欢迎点赞收藏,也欢迎在评论区留下你的第一个 Vue 问题——我会一一解答。下期我们聊聊《如何用 Vue + Node.js 搭建一个真实的用户登录系统》!

评论 0