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

vue精简面试题

1. Vue 的响应式原理

Vue 2 的响应式原理
  • 实现方式
    使用 Object.defineProperty 对数据对象的每个属性进行递归劫持(Getter/Setter),通过 依赖收集(Dep) 和 派发更新(Watcher) 实现响应式。

    • 依赖收集:在 Getter 中收集依赖(如模板中的变量)。

    • 派发更新:在 Setter 中通知 Watcher 触发视图更新。

  • 缺点

    • 无法监听对象新增属性或删除属性(需用 Vue.set/Vue.delete)。

    • 对数组的监听需重写数组方法(如 pushpop)。

Vue 3 的响应式原理
  • 实现方式
    使用 Proxy 代理整个对象,Reflect 操作对象属性,无需递归遍历,天然支持动态新增/删除属性。

    • 优势

      • 性能更好,支持 Map/Set 等数据结构。

      • 无需手动处理数组和对象的变化。

  • 核心流程

    • Proxy 拦截对象操作(如 getsetdeleteProperty)。

    • 通过 track 和 trigger 函数追踪依赖和触发更新。


2. Vue 的双向数据绑定

  • 核心机制
    通过 v-model 指令实现,本质是语法糖,结合 :value 属性绑定和 @input 事件监听。

  • 示例

    vue

    复制

    <input v-model="message">
    <!-- 等价于 -->
    <input :value="message" @input="message = $event.target.value">
  • 自定义组件中的 v-model
    Vue 2 默认使用 value 属性和 input 事件;
    Vue 3 支持自定义 modelValue 属性和 update:modelValue 事件,允许多个 v-model 绑定。


3. Vue 中的 nextTick

  • 作用
    在下次 DOM 更新循环结束后执行回调函数,用于获取更新后的 DOM。

  • 原理
    Vue 的异步更新队列会批量处理数据变更,nextTick 将回调推入微任务队列(优先 Promise.then,降级到 setImmediate 或 setTimeout)。

  • 使用场景

    javascript

    复制

    this.message = '更新数据';
    this.$nextTick(() => {
      console.log('DOM 已更新:', this.$refs.element.textContent);
    });

4. Vue 组件传值方式

方式说明适用场景
Props/$emit父子组件通过 Props 传值,子组件通过 $emit 触发事件通知父组件。父子组件直接通信
Event Bus全局事件总线(const bus = new Vue()),通过 bus.$on 和 bus.$emit跨层级简单通信(小型项目)
Provide/Inject祖先组件 provide 提供数据,后代组件 inject 注入。跨层级深层嵌套组件
Vuex/Pinia全局状态管理库,集中管理共享状态。复杂应用的状态管理
$refs通过 this.$refs.childRef 直接访问子组件实例。父组件直接操作子组件方法或数据

5. Vue 2 和 Vue 3 的区别

特性Vue 2Vue 3
响应式系统Object.definePropertyProxy
API 设计Options API(data, methods 分块)Composition API(逻辑复用更灵活)
性能优化较慢的虚拟 DOM Diff更快的 Diff(静态标记、缓存优化)
TypeScript 支持支持有限原生支持 TypeScript
生命周期钩子beforeCreatecreated 等setup 替代 beforeCreate 等
Fragment/Teleport不支持支持多根节点(Fragment)和 Teleport

6. 虚拟 DOM 和 Diff 算法的区别

虚拟 DOM(Virtual DOM)
  • 定义:轻量级的 JavaScript 对象,描述真实 DOM 结构。

  • 作用:减少直接操作真实 DOM 的性能开销,实现跨平台渲染(如 SSR、Native)。

Diff 算法
  • 核心策略

    • 同级比较:仅比较同一层级的节点,不跨级比较。

    • 双端指针:Vue 2 使用双端对比算法,减少移动次数。

    • Key 优化:通过 key 标识节点,复用相同 key 的元素。

  • Vue 3 的优化

    • 静态提升:将静态节点提升到渲染函数外部,避免重复创建。

    • 补丁标志(Patch Flags):标记动态节点类型(如文本、class),跳过未变化部分。

Vue 2 vs Vue 3 的 Diff 差异
Vue 2Vue 3
全量 Diff(逐个节点比较)靶向更新(按 Patch Flags 跳过静态内容)
双端对比算法更高效的动态节点追踪

总结

  • 响应式原理:Vue 3 的 Proxy 解决了 Vue 2 的监听限制,性能更优。

  • 组件通信:根据场景选择 Props/事件、状态管理或依赖注入。

  • 版本差异:Vue 3 在性能、开发体验和扩展性上全面升级。

  • 虚拟 DOM:Vue 3 通过静态提升和靶向 Diff 大幅优化渲染性能。


http://www.kler.cn/a/569832.html

相关文章:

  • 【软考-架构】备战2025软考
  • docker简介-学习与参考
  • 【Content-Type详解、Postman中binary格式、json格式数据转原始二进制流等】
  • 代码随想录算法【Day60】
  • Linux内核以太网驱动分析
  • ollama和open-webui部署ds
  • C++11特性(笔记二lambda,function)
  • VMware Ubuntu 共享目录
  • PDF文档中图片解析
  • 橙心同步助手更新,,支持博客园、头条和语雀
  • 不用写代码,批量下载今日头条文章导出excel和pdf
  • 傅里叶分析
  • 如何使用ArcGIS Pro制作横向图例:详细步骤与实践指南
  • 介绍如何使用生成对抗网络(GAN)和Cycle GAN设计用于水果识别的模型
  • ES 删除index 的curl
  • Vue.js 组件开发指南:实现、传值与优缺点分析
  • 性能优化——cache与cacheline
  • 如何远程访问svn中的URL
  • 数据结构(初阶)(六)----队列
  • ctfshow刷题笔记—栈溢出—pwn61~pwn64