侧边栏壁纸
博主头像
ZOUXS的空间博主等级

人生苦短,我学python

  • 累计撰写 23 篇文章
  • 累计创建 24 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Vue & UniApp 知识点

zouxs
2026-05-22 / 0 评论 / 0 点赞 / 3 阅读 / 5824 字
温馨提示:
本文最后更新于 2026-05-22,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

目录

  1. Vue 生命周期
  2. 双向绑定原理
  3. 组件通信方式
  4. UniApp 优化方案
  5. Vue 高频面试扩展知识点

1. Vue 生命周期

1.1 生命周期四个阶段

  1. 创建阶段:组件初始化,数据已生成,但 DOM 未渲染
  2. 挂载阶段:DOM 渲染完成,页面可见
  3. 更新阶段:数据变化 → 视图更新
  4. 销毁阶段:组件卸载,清理定时器/事件监听

1.2 核心钩子(必背)

  • beforeCreate:数据未初始化,无法访问 data/methods
  • created:数据已创建,可发起数据请求,但无 DOM
  • beforeMount:挂载前
  • mountedDOM 渲染完成,操作 DOM、请求接口、初始化插件
  • beforeUpdate:数据更新,视图未更新
  • updated:视图已更新
  • beforeDestroy:销毁前,清理定时器、全局事件
  • destroyed:销毁完成

1.3 面试标准答案

  • 数据请求放在 mounted:保证 DOM 已渲染,请求完成后可直接渲染视图,避免白屏、闪烁。
  • 定时器/事件监听必须在 beforeDestroy 清除,防止内存泄漏。

2. 双向绑定原理

2.1 核心实现

  • Vue2Object.defineProperty 劫持对象的 getter/setter
  • Vue3Proxy 代理整个对象,支持数组、新增属性、嵌套对象

2.2 响应式流程

  1. 读取数据 → 触发 getter → 收集依赖(Watcher)
  2. 修改数据 → 触发 setter → 通知更新
  3. 虚拟 DOM 对比 → 局部更新视图

2.3 虚拟 DOM

  • 用 JS 对象模拟真实 DOM 结构
  • 优点:减少 DOM 操作、提升性能、跨平台

2.4 Diff 算法

  • 对比新旧虚拟 DOM,只更新变化部分
  • 同层对比、key 复用节点、最小化更新
  • 面试必说:key 不能用 index,会导致节点复用错误

3. 组件通信

3.1 父子通信

  • 父 → 子:props 传值
  • 子 → 父:$emit 触发事件
  • 最常用、最标准

3.2 兄弟/跨级通信

  • eventBus:事件总线,$on / $emit
  • 简单项目适用,大型项目不推荐

3.3 全局状态管理

  • Vue2/Vue3:Vuex
  • Vue3:Pinia(轻量化、简洁、推荐)
  • 存储:用户信息、权限、全局配置、购物车、主题

3.4 深层跨级注入

  • provide / inject
  • 祖先组件 provide,后代组件 inject
  • 适合组件库、深层跨级传递

3.5 面试总结

  • 父子:props/$emit
  • 全局:Vuex/Pinia
  • 简单跨组件:eventBus
  • 深层跨级:provide/inject

4. UniApp 优化方案

4.1 分包加载

  • 小程序有2M/4M主包大小限制
  • 把不常访问页面放到分包
  • 主包只保留首页、tabBar、公共组件
  • 大幅降低主包体积

4.2 条件编译

  • #ifdef %PLATFORM% 区分多端代码
  • 支持:微信小程序、App、H5、支付宝、抖音等
  • 避免多端兼容问题

4.3 图片优化

  • 图片压缩:tinyimg、webpack 压缩
  • 使用 WebP 格式
  • 禁止大图、原图直接上传
  • 封面图使用缩略图

4.4 懒加载

  • 图片懒加载
  • 列表数据分页加载
  • 减少首屏渲染时间

4.5 避免页面层级过深

  • 页面栈最多 10 层,超过无法跳转
  • 用 redirect、reLaunch 控制页面栈
  • 避免无限层级跳转

4.6 其他优化

  • 避免滥用自定义组件
  • 减少 watch 深度监听
  • 避免频繁 setData
  • 骨架屏提升体验

5. Vue 高频面试扩展知识点

5.1 Vue2 与 Vue3 区别

  • Vue3 使用 Proxy、Tree shaking、组合式 API、性能更强
  • Vue2 使用 defineProperty,不支持自动监听数组/新增属性

5.2 计算属性 vs 侦听属性

  • computed:具有缓存,依赖不变不重新计算
  • watch:监听数据变化,执行异步/复杂逻辑

5.3 组件性能优化

  • v-show 替代 v-if(频繁切换)
  • v-for 必须带 key
  • 异步组件、懒加载组件
  • 冻结数据:Object.freeze()

5.4 路由守卫

  • 全局守卫:beforeEach 权限控制
  • 路由独享守卫
  • 组件内守卫

5.5 面试必背总结

Vue 核心:响应式 + 虚拟 DOM + 组件化 UniApp 核心:一次编写多端运行 + 分包 + 条件编译 + 性能优化 面试高频:生命周期、双向绑定、组件通信、性能优化

相关链接

0

评论区