[vue3]HTML Learn Data Day 10

感觉已经算是学完了,有些东西稍微了解一下,还有没涉及到的东西估计一辈子都碰不到。

上大学之前追求创造属于自己的一些东西,比如有趣的个人网站,或者小游戏。

ai让这些变得触手可及,我所追求的东西已经得到了,接下来该做什么呢?

找工作估计用不着,不过在造点小玩意的时候还是挺常用的。

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

1. TypeScript 接口与类型约束

在 Vue 3 项目中,为了提高代码的可维护性和类型安全,通常会集中管理类型定义。

  • 规范做法 :在 src 目录下创建 types 文件夹,并新建 index.ts。在这个文件中通过 export interfaceexport type 声明变量类型。
  • 优势:其他组件可以直接引入这些共用类型,避免重复定义,并且在编写代码时能享受编辑器的自动补全和类型检查。

2. 组件通信:Props 的使用

在父子组件中传递数据时,props 是最常用的方式。Vue 模板语法中,属性前是否带有冒号 :v-bind 的简写)决定了数据的解析方式。

父组件传递数据:

HTML 复制代码
<Person a="1+1" :b="1+1" />

子组件接收数据 (Person.vue):

TypeScript 复制代码
import { defineProps } from 'vue'

// 基础接收方式(你笔记中的写法)
const props = defineProps(['a', 'b'])

// 💡 补充:既然学了 TS,更推荐使用泛型约束的写法,这样会有完美的类型提示
const props = defineProps<{
  a: string
  b: number
}>()

3. 自定义 Hooks (组合式函数 / Composables)

修正 :在 Vue 3 中,官方更准确的称呼是 组合式函数 (Composables)。虽然灵感来源于 React Hooks,但 Vue 的实现机制不同。

  • 本质 :它不是 C++ 中的类(类主要用于面向对象编程),而是利用 Vue 的组合式 API(如 ref, reactive)来封装和复用有状态的逻辑
  • 规范 :通常在 hookscomposables 文件夹下创建以 use 开头的 TS 文件(例如 useUser.ts)。
  • 用法 :在需要的地方直接 import 该函数并解构出需要的响应式变量和方法,这极大解决了 Vue 2 中 mixin 命名冲突和数据来源不清晰的问题。

4. Vue Router 路由核心

路由的本质是 URL 路径(Key)与视图组件(Value)的映射关系。

4.1 路由的两种模式

特性 History 模式 (/user) Hash 模式 (/#/user)
外观 现代、美观,类似真实目录路径 带有 # 符号,稍显冗长
服务器感知 感知。刷新会向服务器请求该路径 不感知 。服务器仅识别 # 之前的内容
后端配置 必须配置 (需将所有未知路由指向 index.html,否则 404) 无需配置,开箱即用
底层原理 HTML5 History API (pushState 等) 监听 hashchange 事件

4.2 嵌套路由

在路由配置中使用 children 属性可以实现页面的嵌套。

💡 补充遗漏点 :配置了嵌套路由后,必须 在父组件的模板中放置 <RouterView /> 标签,子组件才会有地方渲染。

TypeScript 复制代码
const routes = [
  {
    path: '/user',
    component: () => import('../views/User.vue'),
    children: [
      {
        path: 'profile', // 注意:子路径不要以 '/' 开头
        component: () => import('../views/UserProfile.vue')
      }
    ]
  }
]

4.3 路由传参 (Query vs Params)

方式一:Query 传参 (适用于多参数、可选参数)

类似于 GET 请求的查询字符串,参数会显示在 URL 中(如 /news?id=123)。

HTML 复制代码
<RouterLink to="/news?a=aa&b=bb">新闻</RouterLink>

<RouterLink 
  :to="{
    path: '/news',
    query: {
      id: 'xxx',
      title: 'yyy'
    }
  }"
>
  新闻
</RouterLink>

方式二:Params 传参 (适用于动态路由)

URL 更加简洁(如 /news/detail/123/tech)。需要提前在路由规则中用 : 占位。

TypeScript 复制代码
// 路由规则配置
{
  name: 'NewsDetail', // 必须配置 name
  path: '/news/detail/:id/:category',
  component: Detail
}

**如果使用对象写法进行 Params 传参,必须 使用路由的 name 属性,绝对不能使用 path,否则参数会丢失!

4.4 路由的 Props 配置

为了让路由组件彻底和路由解耦(不需要在组件里写啰嗦的 route.query.xxx),可以开启 props 配置。

  • 布尔值模式props: true(仅适用于 params 传参)。
  • 函数模式props: (route) => route.query(适用于 query 传参,返回一个对象直接作为 props 传递给组件)。

4.5 路由行为控制

  • Replace 模式 :默认情况下,路由跳转是 push 模式(留下历史记录,可以点浏览器的"后退")。如果在标签上加上 <RouterLink replace>,则会替换当前历史记录,用户无法后退到上一页。

  • 路由重定向 (Redirect):在应用加载时,自动跳转到指定页面。

    TypeScript 复制代码
    {
      path: '/',
      redirect: '/news'
    }
  • 编程式导航 :脱离 <RouterLink>,在 JS/TS 代码中控制跳转(例如点击普通按钮、登录成功后跳转)。

    TypeScript 复制代码
    import { useRouter } from 'vue-router'
    const router = useRouter()
    
    // 跳转到指定页面
    router.push('/user/detail')
相关推荐
随风一样自由3 小时前
【前端独角兽】刚进入前端领域的前端开发用jQuery还是Vue3?
前端·javascript·vue3·jquery
IMPYLH4 小时前
HTML 的 <data> 元素
前端·html
YHHLAI4 小时前
[特殊字符] 面试中的 Promise —— 从入门到精通
前端·javascript·面试
weixin_BYSJ19875 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
沪飘大军6 小时前
ll-llm:一个零依赖、可插拔的 OpenAI 兼容 LLM 代理
javascript
leoZ2316 小时前
Claude 驱动的全栈开发:Spring Boot + Vue 的 BS 架构实践
vue.js·spring boot·架构
山河木马7 小时前
GPU自动处理专题3-NDC怎么映射成屏幕像素坐标(视口变换)
javascript·webgl·图形学
UndefeatedJie8 小时前
全栈项目架构三支柱:模块化 × RESTful × 语义化HTML,附AI辅助开发心法
html
Appthing8 小时前
在 TanStack Start 中使用 VitePWA 的正确配置
javascript
凌奕8 小时前
Claude Code 上线了"一键发网页"功能:报告做完直接甩链接,部署这一步彻底消失
html·claude