零基础也能上手的 Vue.js 开发指南
大家好,我是一名开源项目维护者,也做过不少前端技术分享。每次看到新手在 Vue 入门时被各种概念绕晕,我就想起自己当初学的时候:文档看不懂、命令跑不通、连“组件”是啥都搞不清。今天这篇指南,就是想用最直白的方式,带你从零开始真正写出第一个 Vue 应用——不画大饼,只讲能跑通的代码。
为什么选 Vue?它和 React 到底有什么区别?
Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。简单说,它能让你用更少的代码、更清晰的结构,做出动态网页(比如点击按钮变颜色、实时搜索、表单验证等)。
你可能会问:“现在不是 React 更火吗?要不要直接学 React?”
这是个好问题,也是很多初学者纠结的点。其实两者都能完成类似任务,但学习曲线和开发体验不同:
| 对比项 | Vue.js | React |
|---|---|---|
| 学习门槛 | 较低,模板语法接近 HTML | 较高,需掌握 JSX 和函数式思维 |
| 官方工具链 | 完整(Vue CLI / Vite) | 社区为主(Create React App 等) |
| 数据绑定 | 双向绑定简洁直观 | 单向数据流,更强调状态管理 |
| 适合场景 | 中小型项目、快速原型、运营后台 | 大型应用、复杂交互、团队协作 |
📌 运营同学注意:如果你是做活动页、内部管理系统、或者需要快速交付的运营页面,Vue 的模板写法会让你效率翻倍——改个文案几乎不用碰 JS。
所以,别被“面试题挑战”吓到。先学会一个,再横向对比,才是正道。
第一步:搭建你的开发环境(5 分钟搞定)
别怕命令行!我当初第一次敲 npm 时手都在抖。其实就三步:
1. 安装 Node.js
去官网 https://nodejs.org 下载 LTS 版本(长期支持版),安装时一路“下一步”即可。
验证是否成功:
node -v # 应输出版本号,如 v18.17.0
npm -v # 应输出版本号,如 9.6.7
2. 安装 Vue 官方脚手架工具
我们用 Vite(读作 “veet”),它是 Vue 团队推荐的新一代构建工具,启动速度比 Webpack 快 10-100 倍!
npm create vue@latest my-vue-app
执行后会有一系列提示,新手建议这样选:
- ✔ Project name:
my-vue-app(回车默认) - ✔ Add TypeScript?
No - ✔ Add JSX Support?
No - ✔ Add Vue Router?
No - ✔ Add Pinia?
No - ✔ Add Vitest?
No - ✔ Add Cypress?
No - ✔ Add ESLint?
Yes - ✔ Add Prettier?
Yes
✅ 避坑指南:初学别急着加路由、状态管理这些高级功能,先专注理解核心概念!
3. 启动项目
cd my-vue-app
npm install
npm run dev
看到终端输出 Local: http://localhost:5173/,打开浏览器访问,就能看到 Vue 的欢迎页了!
核心概念三板斧:模板、响应式、组件
Vue 的核心思想就三点,我用“做饭”来比喻:
1. 模板(Template)—— 菜谱
你在 .vue 文件里写的 HTML 结构,就是模板。但它不是普通 HTML,能嵌入动态内容。
<!-- App.vue -->
<template>
<h1>Hello {{ name }}!</h1>
</template>
<script>
export default {
data() {
return {
name: "小明"
}
}
}
</script>
{{ name }} 就是插值表达式,会自动显示 data 里定义的 name 值。
2. 响应式(Reactivity)—— 食材会自己变
当你修改 name 的值,页面上的文字自动更新,这就是响应式。
试试加个按钮:
<template>
<h1>Hello {{ name }}!</h1>
<button @click="changeName">换名字</button>
</template>
<script>
export default {
data() {
return {
name: "小明"
}
},
methods: {
changeName() {
this.name = "小红" // 页面立刻变成 Hello 小红!
}
}
}
</script>
@click 是事件监听器,methods 里放函数。记住:所有要变化的数据,必须在 data 里声明!
3. 组件(Component)—— 模块化厨房
组件就是可复用的 UI 块。比如你有个“点赞按钮”,可以在多个页面用。
新建 LikeButton.vue:
<!-- LikeButton.vue -->
<template>
<button @click="liked = !liked">
{{ liked ? '❤️ 已点赞' : '🤍 点赞' }}
</button>
</template>
<script>
export default {
data() {
return {
liked: false
}
}
}
</script>
在 App.vue 中使用它:
<template>
<LikeButton />
</template>
<script>
import LikeButton from './components/LikeButton.vue'
export default {
components: {
LikeButton
}
}
</script>
💡 架构思考:组件化让代码像乐高一样拼装。运营后台常有几十个相似卡片,用组件只需写一次,改一处全更新。
实战:做一个简易待办清单(Todo List)
现在,把上面知识串起来,做个小项目。
步骤 1:准备数据结构
每个待办事项有:内容(text)、是否完成(done)
步骤 2:编写模板
<!-- App.vue -->
<template>
<div>
<h2>我的待办</h2>
<!-- 新增输入框 -->
<input v-model="newTodo" @keyup.enter="addTodo" placeholder="输入任务...">
<button @click="addTodo">添加</button>
<!-- 待办列表 -->
<ul>
<li v-for="(todo, index) in todos" :key="index">
<input type="checkbox" v-model="todo.done">
<span :class="{ done: todo.done }">{{ todo.text }}</span>
<button @click="removeTodo(index)">删除</button>
</li>
</ul>
<!-- 统计 -->
<p>共 {{ todos.length }} 项,已完成 {{ completedCount }} 项</p>
</div>
</template>
步骤 3:实现逻辑
<script>
export default {
data() {
return {
newTodo: '',
todos: [
{ text: '学习 Vue', done: true },
{ text: '写教程', done: false }
]
}
},
computed: {
completedCount() {
return this.todos.filter(t => t.done).length
}
},
methods: {
addTodo() {
if (this.newTodo.trim()) {
this.todos.push({ text: this.newTodo, done: false })
this.newTodo = ''
}
},
removeTodo(index) {
this.todos.splice(index, 1)
}
}
}
</script>
步骤 4:加点样式
<style>
.done {
text-decoration: line-through;
color: #999;
}
input, button {
margin: 5px;
padding: 5px;
}
</style>
🔍 关键指令解释:
v-model:双向绑定输入框和数据v-for:循环渲染列表:key:帮助 Vue 高效更新列表(必须加!)computed:计算属性,自动缓存结果
保存后,你就能添加、勾选、删除任务了!这就是一个完整的交互应用。
新手常踩的 5 个坑(附解决方案)
❌ 问题 1:修改数组,页面没更新?
// 错误写法
this.items[0] = newValue
// 正确写法
this.$set(this.items, 0, newValue)
// 或用 splice / filter 等返回新数组的方法
原因:Vue 2 无法检测直接索引赋值。Vue 3 已修复,但养成用不可变方法的习惯更好。
❌ 问题 2:this 指向错误?
在 setTimeout 或箭头函数里用 this 要小心:
// 错误
setTimeout(function() {
this.name = 'xxx' // this 不是 Vue 实例!
}, 1000)
// 正确
setTimeout(() => {
this.name = 'xxx' // 箭头函数继承外层 this
}, 1000)
❌ 问题 3:组件不显示?
检查三点:
- 是否在
components里注册了? - 组件名是否首字母大写?(
MyButton而非my-button) - 模板是否只有一个根元素?(Vue 3 支持 Fragment,但初学建议包一层 div)
❌ 问题 4:控制台报错 xxx is not defined?
确保所有变量都在 data、props 或 methods 中定义。Vue 不允许随意添加新属性(除非用 $set)。
❌ 问题 5:热更新失效?
删掉 node_modules 和 package-lock.json,重新 npm install。90% 的玄学问题能解决。
下一步怎么学?避开“面试题陷阱”
很多新手一上来就刷“Vue 响应式原理”、“虚拟 DOM diff 算法”,结果越学越懵。我的建议是:
📚 学习路径图(循序渐进)
1. 掌握基础 → 2. 做 3 个小项目 → 3. 学 Vue Router →
4. 学 Pinia(状态管理)→ 5. 看源码/原理 → 6. 对比 React
🛠️ 必备工具清单
| 工具 | 用途 | 安装命令 |
|---|---|---|
| Vue DevTools | 浏览器调试组件 | Chrome 插件商店搜索 |
| Volar | VSCode 的 Vue 支持 | VSCode 扩展搜 Volar |
| Prettier | 自动格式化代码 | 项目已内置 |
💬 关于“面试题挑战”
别被吓住!面试官问原理,是看你是否深入思考,不是背答案。建议:
- 先能熟练用 Vue 做项目
- 再带着问题去看源码(比如“为什么 data 要是函数?”)
- 最后总结成自己的话(比背八股文强十倍)
写在最后
我当初学 Vue 时,花了一周才搞懂 v-model 和 props 的区别。但一旦突破那个临界点,写页面就像搭积木一样爽快。
Vue 的哲学是“渐进式”——你可以只用它增强一个按钮,也可以构建大型 SPA。作为运营、产品或刚转行的同学,它是最友好的起点。
现在,关掉这篇文章,打开你的编辑器,把那个待办清单跑起来吧。遇到问题?欢迎在开源社区提问——每一个维护者,都曾是那个手抖敲命令的新手。
记住:代码不怕错,怕不动手。

评论 0