mobx简单原理

61 阅读1分钟
 let deps=null
    let reactions=[]
    function handler(){
     return {
        get(target,key,descriptor){
            if(deps){
               reactions.push(deps)
            }
            return Reflect.get(target,key,descriptor)
        },
        set(target,key,value,descriptor){
             Reflect.set(target,key,value,descriptor)
             reactions.forEach(item=>item())
        }
     }
    }
    function walk(data,handler){
        if(typeof data!='object') return data
        for(let key in data){
            data[key]=walk(data[key],handler)
        }
        return new Proxy(data,handler())
    }
    function autorun(fn){
        deps=fn
        fn()
        deps=null
    }
    const data={
        count:0
    }
    const store=walk(data,handler)
    autorun(()=>{
        console.log('hello ',store.count)
    })
  
    window.store=store