当前位置: 首页 > java >正文

Vue2 相关知识点整理

一、Vue2 核心机制

1. Vue2 的响应式原理是什么?
  • 答案
    Vue2 通过 Object.defineProperty 给对象的每个属性添加 gettersetter,当数据被访问或修改时,自动触发视图更新。
  • 通俗解释
    就像给每个数据绑了一个“监控摄像头”,数据一变化,立即通知页面刷新。
  • 代码示例
    const data = { name: '张三' };
    Object.defineProperty(data, 'name', {get() { console.log('有人读取name了'); },set(newVal) { console.log('有人修改name了,更新页面!'); }
    });
    

2. Vue 的生命周期钩子有哪些?
  • 核心钩子
    • beforeCreate:实例刚创建,数据观测和事件还未初始化(无法访问 data)。
    • created:数据已初始化,可调用接口,但 DOM 未渲染(常用于数据请求)。
    • beforeMount:模板编译完成,但未挂载到页面。
    • mounted:DOM 已渲染完成,可操作 DOM 或第三方库(如初始化地图)。
    • beforeUpdate:数据变化前,可获取更新前的 DOM 状态。
    • updated:数据变化后,DOM 已更新(避免在此修改数据,可能导致死循环)。
    • beforeDestroy:实例销毁前,清理定时器或解绑事件。
    • destroyed:实例销毁完成。
  • 口诀:创建 → 挂载 → 更新 → 销毁,每个阶段都有“前”和“后”。

二、模板与指令

3. v-ifv-show 的区别?
  • v-if:条件为假时,元素从 DOM 中移除。适合切换频率低的场景(如权限控制)。
  • v-show:通过 CSS 的 display: none 隐藏元素,DOM 仍存在。适合频繁切换的场景(如折叠面板)。
  • 比喻
    v-if 像拆房子(重建成本高),v-show 像关灯(快速切换)。

4. computedwatch 的区别?
  • computed

    • 缓存:依赖的数据不变时,直接返回缓存结果。
    • 场景:多数据影响的复杂计算(如购物车总价)。
    computed: {total() { return this.price * this.quantity; }
    }
    
  • watch

    • 监听:数据变化时执行异步或复杂操作(如搜索请求)。
    • 场景:数据变化后需要额外处理(如路由参数变化重新加载数据)。
    watch: {searchText(newVal) { this.fetchData(newVal); }
    }
    

三、组件通信

5. 父子组件如何通信?
  • 父 → 子

    <!-- 父组件传递数据 -->
    <Child :msg="parentMsg" />
    
    // 子组件接收
    props: ['msg']
    
  • 子 → 父

    <!-- 子组件触发事件 -->
    <button @click="$emit('update', data)">提交</button>
    
    <!-- 父组件监听 -->
    <Child @update="handleUpdate" />
    

6. 非父子组件如何通信?
  • Event Bus(事件总线)

    // 创建全局事件中心
    const bus = new Vue();
    // 组件A发送事件
    bus.$emit('message', 'Hello');
    // 组件B监听事件
    bus.$on('message', (msg) => { console.log(msg); });
    
  • Vuex(状态管理)
    集中管理共享状态,适合中大型项目。


四、进阶问题

7. Vue 的虚拟 DOM 是什么?有什么优势?
  • 虚拟 DOM:用 JavaScript 对象描述真实 DOM 结构。
  • 优势
    1. 减少 DOM 操作:通过对比新旧虚拟 DOM,找出最小更新范围。
    2. 跨平台:可渲染到非浏览器环境(如移动端、服务器)。
  • 比喻:虚拟 DOM 像建筑图纸,直接修改图纸比拆房子重建更高效。

8. Vue 的 key 有什么作用?
  • 作用:帮助 Vue 识别节点的唯一性,优化更新性能。
  • 场景:在 v-for 循环中必须使用唯一 key
  • 反例
    没有 key 时,列表顺序变化可能导致元素错误复用(如输入框内容错乱)。

9. Vue 的 nextTick 是做什么的?
  • 作用:在下次 DOM 更新后执行回调,用于获取更新后的 DOM。
  • 场景:修改数据后立即操作 DOM。
    this.message = '更新了';
    this.$nextTick(() => {console.log('DOM 已更新:', this.$el.textContent);
    });
    

五、性能优化

10. 如何优化 Vue 应用的性能?
  1. 编码优化
    • 合理使用 v-ifv-show
    • 避免 v-forv-if 同时用在同一元素。
  2. 加载优化
    • 路由懒加载:const Home = () => import('./Home.vue')
    • 图片懒加载:vue-lazyload 插件。
  3. 缓存优化
    • 使用 keep-alive 缓存组件:
      <keep-alive><router-view></router-view>
      </keep-alive>
      

附:高频问题速查表

问题方向高频考点
响应式原理Object.defineProperty、依赖收集
生命周期created vs mountedbeforeDestroy
组件通信props/$emit、Event Bus、Vuex
指令与语法v-if/v-showv-for+key
性能优化懒加载、keep-alive、虚拟 DOM
进阶原理虚拟 DOM 原理、nextTick 机制
http://www.xdnf.cn/news/2929.html

相关文章:

  • 从技术视角解析百度文库AI的核心竞争力与行业启示
  • 【统计方法】交叉验证:Resampling, nested 交叉验证等策略 【含R语言】
  • 非凸科技受邀出席AI SPARK活动,共探生成式AI驱动金融新生态
  • Vue3 Echarts 3D圆形柱状图实现教程以及封装一个可复用的组件
  • 高效 Transformer 的综述
  • AGILE:开启LLM Agent强化学习的创新框架
  • CSdiy java 06
  • Spark,集群搭建-Standalone
  • 小结:PKI(Public Key Infrastructure,公钥基础设施)
  • Python爬虫(10)Python数据存储实战:基于pymongo的MongoDB开发深度指南
  • npm打包内存不足- JavaScript heap out of memory
  • SQLMesh增量模型实战指南:时间范围分区
  • 对比测评:为什么AI编程工具需要 Rules 能力?
  • 借助云蝠智能大模型呼叫,打造企业招聘竞争力
  • 如何强制触发 OpenShift 节点的 MachineConfig 更新
  • GC的查看
  • MySQL事务隔离级别的实现原理MVCC
  • 今日行情明日机会——20250429
  • UEC++第15天|番茄插件、实现跳跃、实现背景运动
  • JavaScript高级进阶(五)
  • 豪越科技消防立库方案:实现应急物资高效管理
  • 链表的中间节点
  • 机器视觉算法与应用:企业级开发全流程详解
  • Kotlin -> lateinit 和 lazy 详解
  • 嵌入式音视频实时通话EasyRTC打造设备安装与调试的高效远程解决方案
  • Nginx反向代理的负载均衡配置
  • Python入门:流程控制练习
  • 数据编辑器中变量的精妙计算与灵动转换​
  • 汽车启动原理是什么?
  • 水库现代化建设指南-水库运管矩阵管理系统建设方案