UNPKG

wft-utils

Version:

The commonly used tool functions in daily development

59 lines (54 loc) 1.08 kB
class Dep { constructor() { this.subscribers = new Set() } depend () { if (activeEffect) { this.subscribers.add(activeEffect) } } notify () { this.subscribers.forEach(effect => { effect() }) } } let activeEffect = null function watchEffect (effect) { activeEffect = effect effect() activeEffect = null } const targetMap = new WeakMap() 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 } function reactive (raw) { Object.keys(raw).forEach(key => { const dep = getDep(raw, key) let value = raw[key] Object.defineProperty(raw, key, { get () { dep.depend() return value }, set (newValue) { if (newValue !== value) { value = newValue dep.notify() } } }) }) return raw }