ustbhuangyi / vue-analysis

:thumbsup: Vue.js 源码分析
https://ustbhuangyi.github.io/vue-analysis/
MIT License
7.68k stars 1.65k forks source link

data.hook 中的 `create` hook是哪来的 #103

Closed a1mersnow closed 3 years ago

a1mersnow commented 4 years ago
function invokeCreateHooks (vnode, insertedVnodeQueue) {
    for (let i = 0; i < cbs.create.length; ++i) {
      cbs.create[i](emptyNode, vnode)
    }
    i = vnode.data.hook // Reuse variable
    if (isDef(i)) {
      if (isDef(i.create)) i.create(emptyNode, vnode)
      if (isDef(i.insert)) insertedVnodeQueue.push(vnode)
    }
  }

core/vdom/patch 里有这个方法

我找了好久都没找到 create hook的来源,我去我的一个项目里加了断点,测了几个地方发现这个地方根本没有执行,所以i.create(emptyNode, vnode)这一句到底是什么作用?

a1mersnow commented 4 years ago

单元测试倒是有用这个create hook 难道只是测试用……

ominus3 commented 3 years ago

vue 提供的 vnode 创建的过程中的一些钩子函数,下面这个我试了一下是会走到 i.create(emptyNode, vnode)

  render(h) {
    return h('div', {
      hook: {
        create() {
          console.log('vnode create')
        }
      },
    }, 123)
  }