news 2026/6/10 1:20:57

Vue.js从零到精通系列(一):初识Vue——背景、环境与第一个应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue.js从零到精通系列(一):初识Vue——背景、环境与第一个应用

摘要:本篇文章是《Vue.js从零到精通》系列的开篇之作,我们将从Vue.js的前世今生讲起,深入理解它诞生的背景、设计理念与版本演进,帮助你建立对框架的宏观认知。随后,我们会手把手搭建基于Vite + TypeScript的开发环境,创建并剖析第一个Vue应用。通过本文,你将不仅学会“怎么做”,更能明白“为什么这么做”,为后续深入学习模板语法、组件化、路由和状态管理打下坚实基础。


一、Vue.js的前世今生

1.1 框架诞生的土壤:前端进化简史

在JavaScript诞生的最初十年,前端开发主要靠手动操作DOM。jQuery的出现大幅简化了DOM操作,但应用复杂度爆炸式增长后,这种“命令式”的写法让代码变得难以维护。2010年后,AngularJS率先将MVVM(Model-View-ViewModel)模式带入前端,让开发者体会到数据驱动视图的便利。但AngularJS的复杂性和性能问题也暴露了出来。随后,React携虚拟DOM和组件化思维横空出世,改变了整个生态。正是在这样的背景下,一个来自Google的华人工程师——尤雨溪(Evan You),决定创造一款更“轻、快、易用”的框架。

1.2 尤雨溪与Vue的诞生

2013年底,尤雨溪在业余时间开始动手编写一个实验性项目,他将AngularJS中自己最喜爱的部分(如声明式模板、双向绑定)提取出来,并配合一套极轻量的响应式系统,这就是Vue.js的雏形。2014年2月,Vue.js在GitHub上首次公开,当时的版本号是0.6。尤雨溪曾在采访中说,Vue的设计初衷就是“我想要的工具”——一个渐进式、可以自底向上逐层应用的框架。

为什么叫Vue?Vue是法语“视图”的意思,发音类似“view”。其核心定位就是视图层框架,专注解决用户界面构建的问题。

1.3 版本演进的三个阶段

  • Vue 0.x ~ 1.x(2014-2015)初具MVVM形态,拥有指令、过滤器、组件等概念,但生态尚不完善。这一阶段主要吸引了喜欢AngularJS但想要更轻量方案的开发者。

  • Vue 2.x(2016-2022)2016年9月,Vue 2.0“Ghost in the Shell”发布,引入了虚拟DOM、服务端渲染、完善的组件体系和官方路由(Vue Router)、状态管理(Vuex)。这个版本让Vue真正走向主流,成为GitHub上Star数增长最快的项目之一。许多耳熟能详的企业(阿里巴巴、百度、小米等)开始在生产环境中大规模使用Vue。

  • Vue 3.x(2020年至今)2020年9月,代号“One Piece”的Vue 3正式发布。底层完全重写,采用TypeScript开发,引入了Composition API、Proxy响应式系统、Teleport、Fragments等新特性,性能大幅提升,代码组织更加灵活。同时保持良好的向下兼容性(通过@vue/compat迁移构建)。Vue 3代表了框架未来的发展方向,也是本系列教程的主力版本。

1.4 核心设计哲学:渐进式框架

Vue的最大特色是“渐进式”。你可以在已有项目中仅用Vue处理某个小部件,也可以将其作为完整的单页应用(SPA)框架使用。它的核心库只关注视图层,官方生态(路由、状态管理、构建工具等)则可以按需集成。这种“按需取用”的设计让Vue的学习曲线极其平滑,对新手非常友好。


二、为什么选择Vue?

2.1 简洁优雅的模板语法

Vue使用基于HTML的模板语法,允许你直接写符合W3C标准的HTML,并通过指令(如v-if、v-for)赋予它们动态能力。这种写法更接近传统网页开发,心智负担小。对于你已掌握的HTML知识,可以说无缝衔接。

2.2 自动化的响应式系统

Vue 2通过Object.defineProperty实现数据劫持,Vue 3则使用Proxy,当你修改数据时,视图会自动更新,无需手动调用setState$apply。这种“声明式渲染”让你只需关心数据本身,DOM操作完全由框架托管。

2.3 强大的组件系统

Vue的单文件组件(.vue)将模板、逻辑和样式整合在一个文件中,极大提升了代码的内聚性和可维护性。配合Scoped CSS和TypeScript,开发体验非常流畅。

2.4 繁荣的生态和中文社区

Vue拥有丰富的官方维护库:Vue Router、Pinia(状态管理)、Vite(构建工具)、Vue Devtools等。特别是中文文档极其完善、社区活跃,对于中文母语者来说,学习资源几乎没有障碍。


三、搭建开发环境

3.1 检查Node.js版本

打开终端,执行:

node -v

确保版本在16.0以上。如果版本过低,建议使用nvm更新。

3.2 使用pnpm创建Vue+TypeScript项目

pnpm是你的老朋友了,我们用它来创建一个全新的Vue 3项目。

pnpm create vite my-vue-app --template vue-ts cd my-vue-app pnpm install

等待依赖安装完成。上述命令创建了一个名为my-vue-app的文件夹,使用vue-ts模板(即Vue + TypeScript)。

3.3 项目结构一览

安装完毕后,你会看到如下目录结构:

my-vue-app/ ├── index.html # 入口HTML文件 ├── package.json # 项目依赖与脚本 ├── pnpm-lock.yaml # pnpm锁文件 ├── tsconfig.json # TypeScript配置 ├── vite.config.ts # Vite配置文件 ├── public/ # 静态资源(不会被编译) └── src/ ├── main.ts # 应用入口 ├── App.vue # 根组件 ├── style.css # 全局样式 └── vite-env.d.ts # Vite环境类型声明

这个结构与你用过的其他前端脚手架(如create-react-app)非常类似。src目录是主战场,.vue单文件组件将是你编写最多的文件。

3.4 启动开发服务器

运行:

pnpm dev

Vite会启动一个本地开发服务器,默认在http://localhost:5173。打开浏览器,你会看到Vue默认的欢迎页面。Vite的极速冷启动会让你立刻感受到现代构建工具的魅力。


四、第一个Vue应用:Hello, Vue 3!

现在,我们来剖析这个默认生成的代码,并亲手修改它。

4.1 入口起点:index.html

打开根目录的index.html,你会看到:

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>my-vue-app</title> </head> <body> <div id="app"></div> <script type="module" src="/src/main.ts"></script> </body> </html>

关键点是<div id="app">——它将是Vue应用挂载的容器,以及通过type="module"引入的main.ts,这是整个应用的JavaScript入口。

4.2 应用入口:src/main.ts

import { createApp } from 'vue' import App from './App.vue' import './style.css' ​ createApp(App).mount('#app')

createApp是Vue 3的核心函数,用于创建一个应用实例。.mount('#app')则将Vue应用挂载到id="app"的DOM元素上。整个流程非常简洁:导入Vue根组件,创建应用,挂载到容器。

4.3 根组件:src/App.vue

这是整个应用的起点,也是所有组件的根。打开这个文件:

<script setup lang="ts"> import HelloWorld from './components/HelloWorld.vue' </script> <template> <HelloWorld /> </template> ​ <style scoped> </style>

你可能会好奇:一个.vue文件里有三个块——<script setup><template><style scoped>,这正是Vue单文件组件的核心魅力。我们逐一解读:

  • <script setup lang="ts">:这是Vue 3推荐的组合式API写法,setup语法糖让你以更简洁的方式编写组件逻辑,lang="ts"指定使用TypeScript。

  • <template>:声明式的模板,写入任何合法的HTML,Vue的编译器会将其转化为虚拟DOM渲染函数,组件中导入了HelloWorld子组件。

  • <style scoped>:带scoped属性的样式只作用于当前组件,不会污染全局。

4.4 修改代码:自己的问候

现在,让我们动手将默认内容改成自己的“Hello Vue”。编辑App.vue

<script setup lang="ts"> // 这里暂时不需要逻辑 </script> ​ <template> <div class="container"> <h1>{{ greeting }}</h1> <p>欢迎来到 Vue 3 的世界</p> </div> </template> ​ <script lang="ts"> // 我们也可以使用普通<script>块 export default { data() { return { greeting: 'Hello, Vue 3!' } } } </script> ​ <style scoped> .container { text-align: center; margin-top: 60px; font-family: 'Arial', sans-serif; } h1 { color: #42b883; } </style>

保存文件,浏览器会自动热更新,显示“Hello, Vue 3!”。注意我们在模板中使用了双花括号{{ greeting }},这是Vue的插值语法,它会将数据对象中的greeting值渲染到视图中。我们通过data()函数返回一个对象,该对象会被Vue的响应式系统接管。当greeting发生改变时,视图会自动更新——这就是响应式最基本的体现。

4.5 理解Vue实例与挂载

每个Vue应用都是从创建一个应用实例开始的。createApp接收一个根组件对象,返回一个应用实例。该实例有mount方法,可以将其挂载到真实的DOM容器上。实例还提供usecomponentdirective等API,允许你全局注册插件、组件和指令。这种设计将“应用”和“视图”解耦,使得测试和SSR更加方便。


五、模板语法初探

5.1 插值

<span>Message: {{ msg }}</span>

双花括号内可以放入JavaScript表达式,例如:

<p>{{ number + 1 }}</p> <p>{{ ok ? 'YES' : 'NO' }}</p> <p>{{ message.split('').reverse().join('') }}</p>

5.2 指令

指令是带有v-前缀的特殊属性,其值应为JavaScript表达式。Vue提供了大量内置指令,用声明式的方式完成DOM操作。

  • v-bind:动态绑定HTML属性。简写为:

<img v-bind:src="imageSrc" /> <a :href="url">链接</a>
  • v-if / v-else-if / v-else:条件渲染。

<p v-if="score >= 90">优秀</p> <p v-else-if="score >= 60">及格</p> <p v-else>不及格</p>
  • v-for:列表渲染。

<li v-for="item in items" :key="item.id"> {{ item.text }} </li>
  • v-on:监听DOM事件。简写为@

<button v-on:click="handleClick">点击我</button> <button @click="count++">增加</button>
  • v-model:表单输入双向绑定。

<input v-model="username" placeholder="输入用户名" /> <p>你的用户名是: {{ username }}</p>

5.3 组件使用

我们已经在App.vue中使用了HelloWorld组件。组件标签可以是大写开头(PascalCase)或连字符形式(kebab-case),在模板中都能识别。Vue的组件系统是构建可复用UI的基石。


六、总结

通过这篇文章,你已完整了解了Vue.js的诞生背景、版本演进和“渐进式框架”的设计理念。我们使用pnpm和Vite搭建了Vue 3 + TypeScript的开发环境,仔细剖析了第一个Vue应用的每个文件,并亲手修改出了自己的“Hello Vue”。此外,我们还初探了插值和指令等模板语法核心。

  • Vue由尤雨溪在2014年创建,以轻量、易用和渐进式著称。

  • Vue 3基于TypeScript重写,使用Proxy实现响应式,带来了Composition API。

  • 项目结构清晰,单文件组件(.vue)集模板、逻辑、样式于一体。

  • createApp(App).mount('#app')是每个Vue应用的启动模式。

  • 模板语法以声明式为主,指令和插值让你专注于数据,而非DOM。


如果这篇文章帮你解决了实操上的困惑,别忘记点击点赞、分享,也可以留言告诉我你遇到的其它问题,我会尽快回复。动手练习是掌握编程最快的方法,请务必亲手敲一遍本文的所有示例代码,并截图保存你的成果。你的关注是我坚持原创和细节共享的力量来源,谢谢大家。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 1:19:50

生成式引擎优化(GEO)实战:本地生活AI搜索获客方案

项目场景&#xff1a; 随着人工智能大模型全面融入搜索生态&#xff0c;用户获取本地服务信息的行为发生了根本性变化。 以往用户依赖百度、浏览器搜索门店&#xff0c;如今更多人直接通过AI问答平台查询住宿、美食、本地游玩攻略。豆包、文心一言、通义千问等AI模型已成为本地…

作者头像 李华
网站建设 2026/6/10 1:18:27

企业微信API开发:外部群高效自动化推动消息到企业微信外部群

打开saas服务平台www.qiwx.online&#xff0c;注册账号点击控制台进入后台系统新建应用凭证&#xff08;Token&#xff09;拷贝Token备用创建实例登录企业微信 支持ipad和windows两种登录方式&#xff01;推荐网络代理&#xff08;地区线路&#xff09;配置好自己的微信常用地域…

作者头像 李华
网站建设 2026/6/10 1:17:39

Emby高级功能完全解锁:emby-unlocked终极免费方案

Emby高级功能完全解锁&#xff1a;emby-unlocked终极免费方案 【免费下载链接】emby-unlocked Emby with the premium Emby Premiere features unlocked. 项目地址: https://gitcode.com/gh_mirrors/em/emby-unlocked 你是否曾经为Emby Premiere的高级功能付费而烦恼&am…

作者头像 李华
网站建设 2026/6/10 1:16:50

C++贪心算法一(练习题)

贪心算法&#xff08;一&#xff09;-训练1-1 区间覆盖问题&#xff08;最少点覆盖&#xff09; 【描述】给定多个区间&#xff0c;用最少的点覆盖所有区间。 【输入描述】区间数n&#xff0c;随后2n个整数&#xff08;左端点 右端点&#xff0c;n组&#xff09; 【输出描述】最…

作者头像 李华
网站建设 2026/6/10 1:14:39

LLM 能力集成:RAG 检索增强生成的架构设计与工程实践

LLM 能力集成&#xff1a;RAG 检索增强生成的架构设计与工程实践一、大模型的知识盲区&#xff1a;为什么纯参数记忆不够用 大语言模型通过参数记忆存储了海量知识&#xff0c;但这种记忆有三个结构性缺陷&#xff1a;知识截止日期导致时效性不足、长尾领域知识覆盖不完整、以及…

作者头像 李华