V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
az22c
V2EX  ›  Vue.js

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

  •  
  •   az22c · Aug 8, 2020 · 4256 views
    This topic created in 2089 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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