当前位置:首页 > VUE

Vue的实现原理 proxy

2026-02-22 08:10:07VUE

Vue 3 的响应式原理:Proxy

Vue 3 使用 Proxy 替代了 Vue 2 中的 Object.defineProperty 来实现响应式系统。Proxy 是 ES6 提供的一种机制,可以拦截对象的操作,如属性读取、赋值、删除等。

const reactive = (target) => {
  return new Proxy(target, {
    get(target, key, receiver) {
      track(target, key) // 依赖收集
      return Reflect.get(target, key, receiver)
    },
    set(target, key, value, receiver) {
      Reflect.set(target, key, value, receiver)
      trigger(target, key) // 触发更新
      return true
    }
  })
}

Proxy 的优势

  • 深层监听Proxy 可以监听对象的所有属性,包括新增和删除的属性,无需像 Object.defineProperty 那样递归遍历。
  • 数组支持Proxy 可以直接监听数组的变化(如 pushpop 等操作),而 Object.defineProperty 需要特殊处理。
  • 性能更好Proxy 只在访问属性时触发,而 Object.defineProperty 需要在初始化时递归遍历所有属性。

依赖收集与触发更新

Vue 3 的响应式系统通过 tracktrigger 实现依赖收集和更新触发:

  • track:在读取属性时记录当前正在运行的副作用(如组件的渲染函数)。
  • trigger:在属性修改时找到所有依赖该属性的副作用并重新执行。
let activeEffect = null

const track = (target, key) => {
  if (activeEffect) {
    // 将 activeEffect 添加到依赖集合中
  }
}

const trigger = (target, key) => {
  // 找到依赖 target[key] 的所有副作用并执行
}

与 Vue 2 的对比

  • 初始化性能:Vue 2 的 Object.defineProperty 需要在初始化时递归遍历所有属性,而 Vue 3 的 Proxy 是惰性的,仅在访问时处理。
  • 动态属性:Vue 2 无法检测新增或删除的属性,而 Vue 3 可以。
  • 数组监听:Vue 2 需要重写数组方法(如 pushpop),而 Vue 3 直接支持。

局限性

  • 浏览器兼容性Proxy 无法被 polyfill,因此 Vue 3 无法支持 IE11 及以下浏览器。
  • 原始值限制Proxy 只能代理对象,无法直接代理原始值(如字符串、数字),需通过 ref 包装。

总结

Vue 3 的 Proxy 实现了更高效、更灵活的响应式系统,解决了 Vue 2 中的许多限制,但需注意浏览器兼容性问题。

Vue的实现原理 proxy

标签: 原理Vue
分享给朋友:

相关文章

vue实现放大镜原理

vue实现放大镜原理

Vue 实现放大镜效果 放大镜效果常见于电商网站的商品展示,通过鼠标悬停或移动实现局部放大。以下是基于 Vue 的实现方法: 核心原理 布局结构:主容器包含小图区域和放大镜区域。 事件监听:通过…

Vue实现lagger页面

Vue实现lagger页面

Vue实现懒加载页面的方法 懒加载(Lazy Loading)是一种优化技术,用于延迟加载页面或组件,直到它们真正需要显示时才加载。以下是几种在Vue中实现懒加载页面的常见方法: 使用Vue Ro…

vue动态组建实现原理

vue动态组建实现原理

Vue动态组件的实现原理 Vue的动态组件主要通过<component>标签和is属性实现,其核心原理涉及以下机制: 动态组件基础语法 <component :is="curren…

Vue实现闯关

Vue实现闯关

Vue 实现闯关功能的方法 使用 Vue 实现闯关功能通常需要结合组件化开发、状态管理和动画效果。以下是实现闯关功能的几种方法: 组件化设计 将闯关界面拆分为多个组件,如关卡选择组件、游戏主界面组件…

vue rooter 实现原理

vue rooter 实现原理

Vue Router 实现原理 Vue Router 是 Vue.js 的官方路由管理器,其核心实现依赖于 Vue 的响应式系统和插件机制。以下是其核心原理的解析: 路由模式 Vue Route…

简述vue实现原理

简述vue实现原理

Vue 实现原理概述 Vue 的核心实现原理基于数据劫持、虚拟 DOM 和模板编译等技术,通过响应式系统实现数据和视图的自动同步。 响应式系统 Vue 使用 Object.definePropert…