你好!欢迎来到 Vue 的世界。从你的项目结构来看,你使用的是现代的 Vue 3 + Vite 构建的项目,并且已经包含了路由 (vue-router)。
你现在正在 src/components/Home.vue 文件中,这是一个非常好的起点!作为新手,建议你按照以下步骤循序渐进地开发:
第一步:跑起你的项目并实时预览
在写代码之前,确保你能实时看到修改的效果。打开 VS Code 的终端 (Terminal),在你的 my-vue-app 目录下运行:
npm install # 如果你还没有安装依赖的话
npm run dev # 启动本地开发环境
然后在浏览器中打开它提示的本地地址(通常是 http://localhost:5173)。
第二步:熟悉 Vue 组件的三大块
在你当前打开的 src/components/Home.vue 中,尝试编写最基础的结构。Vue 的文件主要分为三部分,你可以直接在文件里测试以下代码:
<template>
<!-- 1. 这里写 HTML 结构 -->
<div class="home-container">
<h1>我的第一个 Vue 页面</h1>
<p>当前点击次数: {{ count }}</p>
<button @click="addCount">点我加1</button>
</div>
</template>
<script setup>
// 2. 这里写 JavaScript 逻辑代码
import { ref } from 'vue'
// 定义一个响应式变量(数据变了,页面会自动更新)
const count = ref(0)
// 定义一个普通的方法
const addCount = () => {
count.value++
}
</script>
<style scoped>
/* 3. 这里写 CSS 样式。scoped 表示这里的样式只在当前组件生效,不会污染全局 */
.home-container {
text-align: center;
padding: 20px;
}
button {
padding: 8px 16px;
background-color: #42b983;
color: white;
border: none;
border-radius: 4px;
}
</style>
练习: 保存文件后,去浏览器看看是不是页面已经更新了?点一下按钮试试。
第三步:理解应用是如何串联的
熟悉了单页面开发后,你可以去看看项目是怎么把页面连起来的:
- 入口逻辑:去看看 src/main.js,这是整个项目启动的地方。
-
全局骨架:去看看 src/App.vue。这里通常放全站通用的东西(比如顶部导航栏),里面会有一个
<router-view />标签,它的作用就是根据当前的网址,替换显示对应的页面(比如首页就显示Home.vue)。 -
页面路由:去看看 src/router/index.js。这里配置了网址和组件的对应关系,比如告诉程序:“当访问
/时,展示Home组件”。
第四步:给自己布置一个小任务
当你把上面的内容看懂后,可以尝试独立完成这个任务:
- 在
src/components/目录下新建一个About.vue(关于我们页面),随便写点内容。 - 去 src/router/index.js 中把这个新页面配置上去(比如路径叫
/about)。 - 去 src/App.vue 中加两个可以点击跳转的菜单链接:
<router-link to="/">首页</router-link> | <router-link to="/about">关于</router-link>
你可以先从修改 Home.vue 里的文字和样式开始,随便玩!遇到不知道怎么写的功能(比如:怎么渲染一个列表、起名报错了怎么办),随时发代码问我。
<div v-if="loading">正在拼命加载中...</div>
loading.value = false 之后,为什么立即就关掉了,原理是什么?
这正是 Vue 最核心、最强大的魅力所在,也就是大家常说的 “响应式系统(Reactivity System)”。
在传统的开发方式(比如原生 JavaScript 或 jQuery)中,如果数据变了,你需要手动去写代码操作网页元素,比如 document.getElementById('loading').style.display = 'none'。
但在 Vue 中,你不需要手动操作网页元素,它的原理可以分为三个步骤来理解:
1. ref 的魔法包装(数据劫持)
当你写下:
const loading = ref(true)
Vue 并不是简单地存了一个 true。ref 就像是一个带监控的快递盒子。你把 true 放进盒子里,以后你每次读写盒子里面的东西(通过 .value),Vue 都能立刻察觉到:“哦!有人修改了 loading 的值!”。
2. 建立牵绊(收集依赖)
在你的 HTML 模板中,你写了这样的代码:
<div v-if="loading">正在拼命加载中...</div>
<div v-else>...</div>
当 Vue 第一次把页面画出来时,它发现这里用到了 loading 变量。Vue 的内部笔记会默默记下一笔:“这个 v-if 的显示隐藏,和 loading 这个盒子绑定了。只要盒子里的值变了,我就要回来重新处理这块 HTML。”
3. 自动触发更新(响应变化)
1.5 秒后,定时器触发了:
loading.value = false
这时候发生了什么?
- 你把盒子里的值改为了
false。 - 盒子的“监控警报”立刻响起,通知 Vue 的系统。
- Vue 翻开之前的笔记,发现
v-if依赖于loading。 - Vue 瞬间在底层做计算:现在
loading是false了,所以v-if="loading"不成立,把它从页面上删掉;然后把下面的v-else加到页面上。 - 你肉眼看到的结果,就是“正在加载”瞬间消失,真实数据瞬间出现。
总结也就是一句口诀:
数据驱动视图(数据变了,页面自动变)。
你只需要关心“我要把数据改成什么样”,剩下的“怎么改变网页上的标签”,全都由 Vue 自动在底层瞬间帮你完成。这就是框架帮你省下的最大程度解放双手的地方!