首页 > 其他分享 >Vue3中Proxy实现响应式系统基本逻辑实现

Vue3中Proxy实现响应式系统基本逻辑实现

时间:2025-01-01 16:18:30浏览次数:1  
标签:依赖 const target depsMap 实现 propKey Proxy Vue3 属性


const activeEffect = new Map() // 存储依赖关系
// 追踪依赖
const setDepsMap = (target, propKey) => {
  if(!activeEffect.has(target)) {
    activeEffect.set(target, new Map()) // 每个对象拥有一个属性依赖映射
  }
  const depsMap = activeEffect.get(target); 
  // 如果属性没有跟踪过,初始化一个空数组来存放依赖
  if(!depsMap.has(propKey)) {
    depsMap.set(propKey, [])
  }
  // 假设存在一个全局的effect副作用,会加入到该属性的依赖列表
  const effectFn = () => {
    console.log(`属性%{propKey}被访问,触发更新`)
  }
  
  // 添加一个示例的依赖函数到该属性的依赖列表中
  depsMap.get(propKey).push(effectFn)
}

// 更新属性时,触发所有相关的依赖
const effect = (target, propKey) => {
  console.log(`对属性${propKey}进行更新操作`)
  // 获取该属性对应的所有依赖函数(副作用)并执行
  const depsMap = activeEffect.get(target)
  if(depsMap && depsMap.has(propKey)) {
    const effects = depsMap.get(propKey)
    effects.forEach(effectFn = effectFn())
  }
}

const handlers = {
  get(target, propKey, proxy) {
    // 跟踪依赖
    setDepsMap(target, propKey)
    return target[propKey]
  },
  set(target, propKey, value) {
    // 触发依赖更新
    effect(target, propKey)
    Reflect.set(target, propKey, value)
  }
}
const target = {
  name: '测试',
  age: '21'
}
const proxyObj = new Proxy(target, handlers)

标签:依赖,const,target,depsMap,实现,propKey,Proxy,Vue3,属性
From: https://www.cnblogs.com/openmind-ink/p/18646048

相关文章

  • 基于广告观看的积分兑换系统实现与优化
    本文介绍了一种基于广告观看的积分兑换系统,其核心理念与用户通过观看广告内容获取积分,进而将积分兑换为现金的机制相似,类似于国内某知名短视频平台的广告收益模式。该系统旨在探索一种非传统收益获取途径,通过技术手段实现自动化、高效化的广告观看与积分累积过程。一、系统......
  • 深入理解计算机系统 4.3 Y86-64 的顺序实现
    4.3.1将处理组织成阶段通常,处理一条指令包括很多操作。将它们组织成某个特殊的阶段序列,即使指令的动作差异很大,但所有的指令都遵循统一的序列。每一步的具体处理取决于正在执行的指令。创建这样一个框架,我们就能够设计一个充分利用硬件的处理器。下面是关于各个阶段以及各阶......
  • JS Proxy对象使用的两个案例:校验器和属性私有化
    校验器consttarget={_id:'1024',name:'vuejs',}//校验器constvalidators={name(val){returnObject.prototype.toString.call(val)==='string';},_id(val){returnObject.prototype.toString.call(v......
  • 基于双层共识控制的直流微电网优化调度(Matlab代码实现)
     ......
  • [Java] Spring Event 发布-订阅模式:解耦与异步通信的高效实现
    序Spring框架通过发布/订阅模式为组件间通信提供了高效且松散耦合的解决方案,提升了系统的灵活性和扩展性。本文探讨该模式的原理、实现、应用场景及其优势与挑战。1发布订阅模式:基本概念发布-订阅模式,又称为观察者模式(ObserverPattern)的一种变体,是一种基于消息传递的设......
  • 基于html+css+js实现的登录注册静态网页
    基于html+css+js实现的登录注册静态网页添加了登录注册的丝滑切换,页面出现的效果,动态背景,纯css的响应式布局效果图展示:登录效果图展示:注册html部分代码:`<divclass="container"><divclass="forms-container"><divclass="for......
  • Java代码实现优先级队列
         最近看了PriorityQueue的源码实现后,我深有感悟,其实本质上就是用了堆的数据结构,我也自己尝试实现了优先级队列的代码,不多说了,代码如下。目录源码实现 测试用例代码源码实现    最近看了PriorityQueue的源码实现后,我深有感悟,其实本质上就是用了堆......
  • [2608]基于JAVA的纪念品拍卖智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的纪念品拍卖智慧管理系统的设计与实现指导老师(一)选题的背景和意义选题背景和意义随着互联网技术的快速发展,电子商务已经成为全球商业活动的重要组成部分。其中,拍卖作为一种特殊的交易方式,在线拍卖系统也逐渐受到......
  • 【Vue】Vue3 项目搭建(五)
    安装环境相关参考【Vue】Vue2项目搭建(二)-H__D-博客园1、安装Nodejs环境,参考【Node.js】安装及使用 ,或者使用nvm工具安装,node版本:v20.16.0 2、安装vue脚手架,【Vue】Vue2项目搭建(二)-H__D-博客园,版本:@vue/cli5.0.8使用vue-cli创建Vue3项目1、......
  • 1.5 实现,而不是继承
    enum对象继承自java.lang.Enum,Java不支持多重继承,这意味着枚举对象不能再继承别的对象了。不过可以创建实现了多个接口的枚举类型。packagewww.com.cat.chapter01;importjava.util.Random;importjava.util.function.Supplier;importjava.util.stream.IntS......