vue源码解读--组件更新流程

经过之前章节的分析,我们知道,组件的render将触发update并最终执行patch

render关键信息如下

vue源码解读--组件更新流程_第1张图片

框红一,使用$vnode保存组件的占位节点

框红二,使用parent指向占位节点

update关键信息如下

vue源码解读--组件更新流程_第2张图片

框红1,在组件初次渲染,使用_vnode保存了其渲染vnode,因此当更新时可以拿到

将新旧vnode传递给patch做更新

patch关键信息如下

vue源码解读--组件更新流程_第3张图片

    由于在update中传递的新旧vnode有值,故跳到框红一的位置。对于组件而言,它在父组件中的表现形式是"占位符节点",并不是被html识别的元素,故isRealElement为false

    框红二,当满足sameVnode时调用patchVnode方法做dom更新

vue源码解读--组件更新流程_第4张图片
(该函数通过一系列对比,将判定两次的渲染vnode是否是同一个,并据此执行不同的patch逻辑)

    框红三,当新旧节点不一致时,走else逻辑,分别执行创建--更新-销毁三个步骤



因此,也就是说,组件更新分成了两个分支--两次节点相同时走patchVnode,否则走创建--更新--销毁

你可能感兴趣的:(vue源码解读--组件更新流程)