vue组件初始渲染过程
1、vue获取模板
2、vue通过Object.defineProperty将data数据变成setter、getter监听模式
3、把模板转化成render函数,执行render函数,变成vdom
4、执行patch函数 patch(ele,vdom)
把vdom挂载到根节点,渲染完成
vue组件更新过程
1、触发响应式setter
2、重新生成虚拟dom
3、执行patch函数
diff算法 patch(vdom.newnode)
将vdom挂载到根节点,渲染完成
diff算法如何比较节点
1、从根节点开始,同层级比较
2、标签/节点名称不同,删除重建
Object.defineProperty()只能监听 data初始化属性的值,解决这一bug,用vue.set(对象,属性,值)或者this.$set(对象,属性,值)手动添加某个属性响应式。