let obj = {html = ''}
function a(){
console.log('html',html)
document.querySelector('#app').innterHTML = html
}
function b(){
obj.html = 'b'
}
b()
第一次学习
let activeEffect = function(){}
activeEffect.deps = []
const targetMap = new WeakMap()
const effectQueue = []
function trace(target,key){
let depsMap = targetMap.get(target)
if(!targetMap.get(target)){
targetMap.set(target, depsMap = new Map())
}
let depsSet = depsMap.get(key) || new Set()
depsSet.set(activeEffect)
activeEffect.deps.push()
}
function trigger(target, key){
const depsSet = targetMap.get(target).get(key)
[...depsSet].forEach(fn => fn())
}
function effect(fn){
const effect = reactiveEffect(fn)
return effect
}
function reactiveEffect(fn){
if(effectQueue.indexOf(fn) !== -1){
activeEffect = effectQueue[effectQueue.length -1]
}else{
effectQueue.push(fn)
activeEffect = fn
}
effectQueue.push(fn)
}
const newObj = Proxy(obj, {
get: function (target, propKey, receiver) {
console.log(`getting ${propKey}!`);
trace(target,key)
return Reflect.get(target, propKey, receiver);
},
set:function(target, propKey,value, receiver){
console.log(`setting ${propKey}!`);
trigger(target,key)
return Reflect.set(target, propKey, value,receiver)
}
})
Mobx