[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')
相关推荐
a1117762 小时前
PascalEditor( 3D建筑编辑器 开源)
前端·开源·html
爱上好庆祝2 小时前
移动端适配
前端·css·学习·html·css3
暮雪倾风3 小时前
【JS-Node】node.js环境安装及使用
开发语言·javascript·node.js
小李子呢021112 小时前
前端八股Vue---Vue2和Vue3的区别,set up的用法
前端·javascript·vue.js
邂逅星河浪漫12 小时前
【银行内网开发-管理端】Vue管理端+Auth后台开发+Nginx配置+Linux部署(详细解析)
linux·javascript·css·vue.js·nginx·html·前后端联调
一 乐13 小时前
电影院|基于springboot + vue电影院购票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·电影院购票管理管理系统
星空椰13 小时前
JavaScript 进阶基础:函数、作用域与常用技巧总结
开发语言·前端·javascript
奔跑的呱呱牛13 小时前
@giszhc/vue-page-motion:Vue3 路由动画怎么做才“丝滑”?(附在线示例)
前端·javascript·vue.js
gCode Teacher 格码致知14 小时前
Javascript提高:小数精度和随机数-由Deepseek产生
开发语言·javascript·ecmascript