V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
az22c
V2EX  ›  Vue.js

vue2 源码修改这 3 行,有啥用?

  •  
  •   az22c · 2020-08-08 11:41:43 +08:00 · 3809 次点击
    这是一个创建于 1560 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/vuejs/vue/commit/91deb4fd910afd51137820f120d4c26d0a99e629

    如这个 commit,其实就加了 1 句 const cloned = fns.slice()

    放在这个 js 代码上下文里面,好像没有区别。

    我看了一下 commit 所指向的 issue,也好像没有关联。自己找个项目去 vue 源码那里修改一下,对比一下,发现好像修改前后没有区别。

    12 条回复    2020-08-11 15:29:00 +08:00
    tikazyq
        1
    tikazyq  
       2020-08-08 11:50:56 +08:00
    可读性
    binux
        2
    binux  
       2020-08-08 11:52:58 +08:00 via Android
    fns 执行过程中会变?
    xiangyuecn
        3
    xiangyuecn  
       2020-08-08 11:55:20 +08:00
    加了 const cloned = 。。。 可读性比旧版差多了,slice 创建新数组,在这段代码里面一点意义都没有
    LostPrayers
        4
    LostPrayers  
       2020-08-08 11:56:44 +08:00
    看 const , 应该还是为了防止 fns 被修改导致 循环提前结束吧, 玄学 js
    xiangyuecn
        5
    xiangyuecn  
       2020-08-08 11:57:40 +08:00
    撤回#3 😂 fns = invoker.fns 😂
    BarZu
        6
    BarZu  
       2020-08-08 11:59:35 +08:00
    fix: multiple merged vnode hooks not invoked properly 人家标题已经告诉你修复了什么问题了
    az22c
        7
    az22c  
    OP
       2020-08-08 12:15:13 +08:00
    我把背景交代一下:
    重新加载组件都是先更新好 fns 属性,然后 invoker 函数作为 DOM 绑定的回调函数会在未来执行,并且它是用到 fns 的。

    ```
    // [伪代码] 判断出用户在该组件添加 click 事件,将这些事件更新到 fns 数组中
    dom.addEventListener('click', invoker() {
    // [伪代码] 用到 invoker.fns
    })
    ```
    好像 2 楼 4 楼正解
    @binux
    @LostPrayers
    az22c
        8
    az22c  
    OP
       2020-08-08 12:15:59 +08:00
    @BarZu 水平不够,没看懂啊,所以一开始觉得和 issue 关联不大
    tonytonychopper
        9
    tonytonychopper  
       2020-08-08 13:44:16 +08:00
    这里只是把 fns 拷贝一份出来,否则其他代码可能会导致 fns 改变,进而影响这里的执行。
    tonytonychopper
        10
    tonytonychopper  
       2020-08-08 13:44:52 +08:00
    @tonytonychopper 如果不是这样,那这段代码就没啥意义。
    lizz666
        11
    lizz666  
       2020-08-08 14:26:17 +08:00
    看了 #5 楼,估计这里就是拷贝一份出来,后面 fns 会被重新赋值,没去看 vue 源码
    JayLin1011
        12
    JayLin1011  
       2020-08-11 15:29:00 +08:00
    不可变状态思想的浅应用,稳定状态更新。Vue 源码栈结构的相关操作涉及浅拷贝,要么是为了稳定目标对象,要么是为了缓存优化性能。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2785 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:41 · PVG 22:41 · LAX 06:41 · JFK 09:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.