- 响应式: 监听data属性getter setter(包括数组)
- 模板编译: 模板到render函数再到vnode
- vdom: patch(elem, vnode)和patch(vnode, newVnode)
vue组件初次渲染过程
- 解析模板为render函数(或在开发环境已完成,vue-loader)
- 触发响应式,监听data属性getter setter
- 执行render函数,生成vnode,patch(elem, vnode)
更新过程
- 修改data,触发setter(此前getter中已被监听)
- 重新执行render函数,生成newVnode
- patch(vnode, newVnode) updateChildren(parentElem, oldCh, newCh, insert) addVnode() removeVnode()
判断节点是否相同,详情见我的另一篇文章vue的diff算法是如何将时间复杂度降低为O(n)的