手写一个简易的响应式系统

admin5天前it知识62

class Dep {  constructor() {    this.subscribers = new Set();  }  depend() {    if (activeEffect) {      this.subscribers.add(activeEffect);    }  }  notify() {    this.subscribers.forEach(effect => effect());  }}let activeEffect = null;function reactive(obj) {  return new Proxy(obj, {    get(target, key) {      const dep = getDep(target, key);      dep.depend();      return Reflect.get(target, key);    },    set(target, key, value) {      const dep = getDep(target, key);      const result = Reflect.set(target, key, value);      dep.notify();      return result;    }  });}function getDep(target, key) {  let depsMap = targetMap.get(target);  if (!depsMap) {    depsMap = new Map();    targetMap.set(target, depsMap);  }  let dep = depsMap.get(key);  if (!dep) {    dep = new Dep();    depsMap.set(key, dep);  }  return dep;}const targetMap = new WeakMap();function effect(fn) {  activeEffect = fn;  fn();  activeEffect = null;}

代码说明:

实现了基本的依赖收集(Dep类)和响应式对象(Proxy代理)

支持对象属性的get/set拦截,自动追踪依赖关系

使用effect函数注册副作用函数,触发时自动更新

通过WeakMap存储依赖关系,避免内存泄漏

模拟了Vue2的核心响应式机制,但未处理数组和新增属性


标签: 分享IT知识

相关文章

享受工作:找到事业与生活的平衡点

工作是我们日常生活中不可或缺的一部分。我们花费大量的时间和精力在工作中,因此,如何享受工作并找到事业与生活的平衡点就显得尤为重要。在这篇文章中,我们将探讨如何享受工作,让事业和生活愉快并行。首先,了解...

关于夏天

在一个炎热的午后,阳光穿过树叶的缝隙,洒在公园的草地上。空气中弥漫着夏日的气息,那是炎热中夹杂着淡淡的花香,还有草地的清新味道。在这个充满活力的季节,夏天以其独特的方式展示着它的魅力。夏天是一个充满色...

湖边

湖边,一片静谧的美好。清晨的阳光洒在湖面上,波光粼粼,让人心旷神怡。湖上的荷叶轻轻摇曳,荷花争奇斗艳,仿佛在向人们展示着它们的美丽。湖边的柳树依依,芦苇丛生,形成了一道道天然的屏障,让人感到一种隐秘的...

暴风雨

暴风雨来临之前,天空中弥漫着一股压抑的气息。乌云密布,仿佛覆盖着一片灰暗的帷幕,将整个天地都笼罩在一片阴沉的氛围中。狂风大作,吹拂着路上的尘土和枝叶,让人感到一阵阵的凉意。突然,一声炸雷打破了寂静,紧...

中秋

月光如水,映照着中国大地。这是一个收获的季节,也是一个团圆的时刻。在秋天的长夜里,一轮明月在苍穹之中绽放出光芒,那是中秋之夜的明月,是华夏民族心中的瑰宝。中秋,又称月圆之夜,起源于古代农耕社会对月亮的...

国庆节之后

国庆节之后,秋意渐浓,天空如洗,阳光更加灿烂。在这片美丽的土地上,繁华的都市和静谧的乡村都在庆祝这个重要的节日。国人们以独特的方式,让这个日子充满了色彩和热情。随着金秋的步伐,丰收的季节来临。果园中的...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。