[vue 3]HTML Learn Data Day 8

原地址:https://www.cnblogs.com/Reisentyan/p/19704971

一、 项目构建与静态资源 (public 文件夹)

在执行 npm run build 构建之后,src 目录下的所有文件都会被编译、压缩并塞进 dist 文件夹,原本的相对路径(如 ./src/assets/...)会因为文件被重命名(加上 Hash 码)而失效。

解决方案与最佳实践:

  • 使用 public 文件夹 :对于不需要任何代码编译处理、直接原样提供给用户下载或展示的文件 (例如 .pdf.md 文档、favicon.ico 等),强烈建议放在项目根目录的 public 文件夹中。
  • 绝对路径引用 :在使用 public 里的资源时,不需要写 /public/xxx.pdf必须直接写绝对路径 /xxx.pdf
  • 底层原理 :这是因为在执行 build 时,Vite/Vue CLI 会将 public 文件夹里的所有内容,原封不动地直接复制到 dist 的根目录下。因此,开发环境和构建后的生产环境,路径表现完全一致。

二、 应对浏览器的缓存

由于单页应用(SPA)的特性,浏览器非常喜欢缓存已经访问过的页面资源。 当我们在服务器上更新了前端代码后,如果页面没有发生变化,必须使用 Ctrl + F5 (Mac 为 Cmd + Shift + R)进行强制刷新,以清除本地缓存,获取最新渲染的 DOM。

三、 Git 强制拉取(处理冲突)

当服务器拉取新代码(git pull)时,如果在此之前对服务器本地文件进行了直接修改,Git 会因为发现"当前代码和远程仓库不匹配"而中止合并,以防覆盖你的本地修改。

如果你确定不需要保留本地的修改,可以使用以下命令丢弃本地更改并强制覆盖

Bash

复制代码
# 1. 丢弃特定文件的本地修改,将其恢复到未修改状态
git restore [被修改的特定文件路径]

# 2. 重新拉取远程仓库的最新代码
git pull

(注:如果不确定本地修改还有没有用,推荐使用 git stash 暂存修改,然后再 git pull。)


四、 JS 核心语法扫盲

由于平时写 C++ 较多,JavaScript 的一些特殊语法容易混淆。这里以项目中的真实代码进行拆解:

TypeScript

复制代码
<script setup lang="ts">
import { ref } from 'vue';

defineOptions({ name: 'BodyPage' });

// 使用 activeTab 来记录当前点击了哪个按钮。null 表示全都没点(收起状态)
const activeTab = ref<string | null>(null);

// 切换面板的函数:如果点击的是当前已打开的按钮,就收起;否则打开新面板
const toggleTab = (tabName: string) => {
    if (activeTab.value === tabName) {
        activeTab.value = null;
    } else {
        activeTab.value = tabName;
    }
};
</script>

1. Vue 的响应式魔法:ref

ref 是 Vue 里极其核心的 API。它可以把一个普通的 JS 变量包装成一个"响应式"变量。当它的 .value 发生改变时,Vue 会立即察觉并自动刷新页面上用到它的部分(类似于游戏引擎里的实时帧渲染机制)。

2. 组件命名:defineOptions

defineOptions({ name: 'BodyPage' }):在 <script setup> 语法糖中,用于给当前组件在 Vue 开发者工具或调试栈中显式命名。

3. const 与 C++ 的核心区别

const activeTab = ref<string | null>(null); 这行代码声明了一个常量。 在 JS 中,const 与 C++ 的行为有显著区别:

  • 当指向基础类型(如数字、纯字符串)时:完全不可修改,和 C++ 一样。
  • 当指向复杂类型(如对象、数组,以及这里的 ref 对象)时const 只锁定了该对象在内存中的地址,但地址内部的属性(如 .value)是可以随意修改的 。这就解释了为什么我们可以用 const 声明 activeTab,却能在下方函数中修改 activeTab.value

4. 函数是一等公民与箭头函数 =>

在 JS 的设计中,函数被赋予了极高的地位,它可以像普通数据一样赋值给变量。

  • = 号:将右侧的整个函数逻辑,作为一个值赋给 toggleTab 变量。
  • => 符号(箭头函数):这是替代老旧 function 关键字的语法糖。可以直观地理解为: (输入参数) => { 执行逻辑 }

五、 Vue Template (模板) 语法拆解

Vue 赋予了 HTML 标签动态执行逻辑的"超能力"。

1. 动态 Class 绑定 (:class)

HTML

复制代码
<button
    class="action-btn"
    :class="{ active: activeTab === 'notice' }"
    @click="toggleTab('notice')"
>
  • class="action-btn":这是静态的默认皮肤,永远存在。
  • :class="{ active: ... }"前缀的冒号 :v-bind: 的简写,意思是告诉 Vue:"后面引号里的内容不是普通字符串,而是 JS 逻辑表达式"。
  • 执行逻辑 :大括号内是 { 样式名: 布尔值判断 }。如果判断条件为 true,Vue 会将 active 样式追加/合并 到原本的 class 列表中;如果为 false,则移除。

2. 胡子语法 (Mustache)

HTML

复制代码
<span class="btn-text">公告</span>
<span class="btn-icon">{{ activeTab === 'notice' ? '−' : '+' }}</span>

双大括号 {``{ }} 在 Vue 中被称为胡子语法(文本插值)。它相当于在 HTML 页面上开了一个"天窗",允许我们直接在页面上输出 JS 变量的值,或执行简单的单行逻辑(如上文使用的三元运算符)。

3. 显示与隐藏指令 (v-show)

HTML

复制代码
<div class="expanded-panel" v-show="activeTab !== null">
    <div v-show="activeTab === 'notice'" class="tab-content">
        </div>
</div>
  • v-show 是 Vue 的专属指令。它的判断标准不是"是否为空",而是"表达式的计算结果是否为 True(真)"。
  • 底层原理 :如果 v-show 里的条件成立,元素正常显示;如果条件不成立,Vue 会在底层自动给该 HTML 元素加上 CSS 样式 display: none; 从而让其瞬间隐身,全程无需手动操作 DOM。
相关推荐
程序员小李白2 小时前
ES6详细解析
前端·ecmascript·es6
We་ct2 小时前
LeetCode 39. 组合总和:DFS回溯解法详解
前端·算法·leetcode·typescript·深度优先·个人开发·回溯
yeshihouhou2 小时前
redisson实现延迟队列
java·前端·数据库
明码2 小时前
Pathlib库
java·服务器·前端
吴声子夜歌2 小时前
小程序——界面API(二)
前端·小程序
im_AMBER3 小时前
编辑器项目开发复盘:主题切换
前端·学习·前端框架·编辑器·html5
我命由我123454 小时前
React - 验证 Diffing 算法、key 的作用
javascript·算法·react.js·前端框架·html·html5·js
@PHARAOH6 小时前
HOW - Kratos 入门实践(二)- 概念学习
前端·微服务·go
We་ct10 小时前
LeetCode 77. 组合:DFS回溯+剪枝,高效求解组合问题
开发语言·前端·算法·leetcode·typescript·深度优先·剪枝