installComponentHooks的疑问
来源:3-2 createComponent
qq_飞越疯人院_1
2019-04-27
function installComponentHooks (data: VNodeData) {
const hooks = data.hook || (data.hook = {})
for (let i = 0; i < hooksToMerge.length; i++) { //["init", "prepatch", "insert", "destroy"]
const key = hooksToMerge[i]
const existing = hooks[key]
const toMerge = componentVNodeHooks[key]
if (existing !== toMerge && !(existing && existing._merged)) {
hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge
}
}
}
正常来说toMerge变量是一直为undefined的,什么情况下会走到有值的逻辑了?
function mergeHook (f1: any, f2: any): Function {
const merged = (a, b) => {
// 这里可能出现两个init钩子函数,为什么都运行一次就算合并了呢?
f1(a, b)
f2(a, b)
}
merged._merged = true
return merged
}
写回答
1回答
-
1.toMerge 肯定是有值的啊,你说的是 existing 吧?但是你可以手写 render 函数,给 data 添加 hook。
2. 这是函数合并的策略,2个函数合并后的结果就是依次执行这俩函数的新函数。052020-01-13
相似问题