
基本实现
使用 Set 保存订阅函数,在 set 拦截器中通知订阅者,再用 Reflect 完成真正的赋值。
const effects = new Set()
const observe = (fn) => effects.add(fn)
const state = new Proxy({ count: 0 }, {
get: (target, key, receiver) => Reflect.get(target, key, receiver),
set(target, key, value, receiver) {
const changed = Reflect.set(target, key, value, receiver)
effects.forEach((effect) => effect())
return changed
},
})
真实响应式系统还要处理依赖收集、嵌套对象、批量更新和清理副作用,但这个例子足够解释核心链路。