美文网首页vuereact & vue & angular
阅读 《vue.js 设计与实现》

阅读 《vue.js 设计与实现》

作者: alue | 来源:发表于2022-08-08 22:39 被阅读0次

    这本书正好适合现在的我阅读,因此每天抽时间倍加感恩的学习,这里简要的记录一下收获。

    响应式原理初探

    我们可以对 data 做一层拦截

    const obj = new Proxy(data, {  
        get(target, key) {  
            track(target, key)  
            return target[key]  
        },  
        set(target, key, value, receiver) {  
            target[key] = value  
            trigger(target, key)  
        }})
    

    只要有某个函数(effect)读了 data 的某个属性,那么就将该函数存起来。
    只要 data 的属性被更改,那么就重新执行该函数。

    难点一 怎么获取这个 effect

    需要强制用户使用特定方式来执行该函数,类似 python 中的装饰器,需要用 wrapper()来包裹我们想要执行的函数。这样,这个函数就会被全局变量 activeEffect 捕捉到。

    let activeEffect  
    function wrapper(effect) {  
        activeEffect = effect  
        effect()  
    }
    

    难点二 怎么高效的存储这个effect

    这个数据结构应该包含的信息有 目标对象target、目标属性 key、依赖函数effect 三类信息。而且一个对象可以有多个属性,一个属性可以有多个effect(当然,一个effect也可以访问多个属性), Vue采用的是 WeakMap<target, Map<key, Set<effect>>>这种数据结构,具备自动垃圾回收的功能。

    相关文章

      网友评论

        本文标题:阅读 《vue.js 设计与实现》

        本文链接:https://www.haomeiwen.com/subject/kesgwrtx.html