Vue3完结- 核心知识总结

Vue3 核心知识总结


一、Vue3 概览与起步

  • Vue3 优势:更好的性能、更小的打包体积、更友好的 TypeScript 支持、全新的 Composition API。
  • 创建工程
    • npm create vue@latest (官方推荐)
    • npm init vite@latest + 安装 @vitejs/plugin-vue
  • 编写 App 组件 :单文件组件 (SFC),<script setup> 语法糖。

二、Composition API(核心)

1. setup 函数

  • beforeCreate 之前执行,是组合式 API 的入口。
  • 返回值:对象中的属性/方法可在模板使用;或返回渲染函数。
  • 语法糖<script setup> --- 更简洁,代码自动暴露给模板。

2. 响应式核心

API 作用 适用场景
ref 包装基本类型 / 对象(底层仍是 reactive) 任意类型,需 .value 访问
reactive 代理对象类型(深层次响应) 仅对象/数组,可直接访问属性
toRef / toRefs 解构 reactive 对象时保持响应式 将单个属性转为 ref / 批量转换
shallowRef / shallowReactive 浅层响应 性能优化,仅监听顶层变化
readonly / shallowReadonly 只读代理 防止意外修改(如 props 传递)

对比 ref vs reactive

  • ref 可包装基本类型,.value 访问;reactive 仅对象。
  • ref 对象可以通过 () => obj 传递保持响应;reactive 解构会丢失响应(需 toRefs)。

3. 计算属性与侦听器

  • computed:缓存计算结果,支持 getter/setter。
  • watch :显式指定侦听源,支持深度、立即执行、侦听多个源。
    • 四种情况:基本类型、对象(需深度)、数组、响应式对象的属性(用 getter 函数)。
  • watchEffect:自动收集依赖,立即执行,不需要指定侦听源。

4. 其他组合式工具

  • customRef :自定义 ref 的依赖追踪和触发更新(如防抖)。
  • toRaw / markRaw:获取原始对象 / 标记对象永不转为响应式。

三、生命周期

  • Vue3 生命周期钩子(选项式 → 组合式对应):
    • beforeCreate / created → 直接用 setup() 替代
    • beforeMountonBeforeMount
    • mountedonMounted
    • beforeUpdateonBeforeUpdate
    • updatedonUpdated
    • beforeUnmountonBeforeUnmount
    • unmountedonUnmounted
  • 注意:destroy 相关命名改为 unmount

四、路由(Vue Router 4)

  • 创建路由器createRouter + historycreateWebHistory / createWebHashHistory)。
  • 核心组件<RouterLink><RouterView>
  • 路由配置
    • 命名路由、嵌套路由(children
    • 动态路由参数:paramsquery
    • props 配置:将路由参数映射为组件 props
    • replace 属性:替换历史记录
  • 编程式导航useRouter 提供 pushreplaceback 等。
  • 重定向redirect 配置。

五、状态管理(Pinia)

  • 优势:轻量、支持 Composition API、TypeScript 友好。
  • 搭建npm install piniacreatePinia()app.use(pinia)
  • 定义 store
    • defineStore(id, { state, getters, actions })(选项式)
    • 或组合式写法:defineStore(id, () => { const state = ref(...); const action = ...; return { state, action } })
  • 使用 storeuseXxxStore(),可直接解构但会丢失响应 → 用 storeToRefs 保持响应。
  • 修改数据
    1. 直接赋值 store.count++
    2. $patch({ count: 2 })
    3. $patch(state => { state.count = 2 })
  • getters:类似计算属性。
  • $subscribe :监听 store 变化,替代 watch

六、组件通信(8 种方式)

方式 说明
props 父传子(单向数据流)
自定义事件 子传父 emit('event', data)
mitt 全局事件总线(任意组件)
v-model 双向绑定,支持多个 v-model:title
$attrs 包含未声明的 props / 事件,透传给后代
$refs / $parent 直接访问子组件实例 / 父组件实例
provide / inject 跨层级依赖注入(响应式数据需 ref/reactive
插槽(slot) 默认插槽、具名插槽、作用域插槽(子传父数据)

七、内置组件与高级特性

  • <Teleport>:将组件内容传送到 DOM 任意位置(如 modal)。
  • <Suspense> :协调异步组件(setup 返回 Promise),显示 fallback 内容。
  • 插槽细节
    • 默认插槽:<slot />
    • 具名插槽:<slot name="header" /> → 父组件用 v-slot:header
    • 作用域插槽:子组件传递数据给父组件插槽 :data="xxx" → 父组件用 v-slot="slotProps"

八、TypeScript 基础回顾

  • 接口 (interface):定义对象结构。
  • 泛型<T>,函数/组件复用类型。
  • 自定义类型type 联合类型、交叉类型等。
  • 在 Vue3 中与 definePropsref<T>reactive 配合使用。

九、全局 API 与迁移注意点

  • 全局 API 转移到应用对象
    • Vue.componentapp.component
    • Vue.directiveapp.directive
    • Vue.mixinapp.mixin
  • 非兼容性改变
    • 移除 $on$off$once(事件总线需用 mitt)
    • v-model 默认值改为 modelValue,可绑定多个
    • keyCode 修饰符移除,使用 kebab-case 事件名
    • v-ifv-for 优先级变化(v-if 更高)

十、自定义 Hooks

  • 将组合式逻辑抽离为可复用的函数(命名通常 useXxx)。
  • 内部可使用 refwatch、生命周期等,返回响应式数据和方法。
  • 示例:useMousePositionuseLocalStorage

结语

📌 复习重点:响应式原理、watch vs watchEffect、路由参数传递、Pinia 的 $patch、作用域插槽、Teleport 与 Suspense 使用场景。

相关推荐
前端 贾公子2 小时前
解决uni-app 输入框,键盘弹起时页面整体上移问题
前端·vue.js·uni-app
南风知我意9572 小时前
Map 与 WeakMap 深度解析:从内存泄漏到 Vue 3 响应式原理的完整指南
前端·javascript·vue.js
github_czy2 小时前
Vue 3 组件生命周期
前端·javascript·vue.js
越甲八千2 小时前
Vue3启动流程和文件结构
前端·javascript·vue.js
独自破碎E2 小时前
Spring Boot + Vue 前后端联调踩坑记录
vue.js·spring boot·后端
Beginner x_u2 小时前
前端八股整理|Vue|虚拟 DOM、Diff 与 Patch 流程
前端·javascript·vue.js
一 乐2 小时前
智能农田管理|基于springboot + vue智能农田管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·智能农田管理系统
CesareCheung3 小时前
Python+Vue +K6接口性能压测平台搭建
开发语言·vue.js·python
qq_429499573 小时前
从LVGL标签读取数据转为变量
前端·javascript·vue.js