react 更新节点流程
-
在进入页面,调用react.render方法接收jsx代码并且显示在界面中
-
实现界面更新,需要拿新节点和旧节点进行对比,找出差异部分,更新到页面中,实现页面的最小 化更新
-
在创建节点时候,新添加一个属性存储对应的virtual dom,
在diff中,判断旧的virtual dom是否存在,
节点类型相同时候
如果不是旧节点,根据type推断是文本还是元素,文本使用updateTextNode更新内容,元素使用updateNodeElement方法进行更新节点,内部删除之前的事件处理函数,循环对象判断是不是新属性存不存在,属性被删除更新
在diff中还需要循环递归调用diff方法对比对应的子元素和旧节点
节点类型不同时候不需要进行比对,根据新的type类型和旧type类型不同且新dom的type不是function判断,
只需要新的virtual dom对象生成新的dom对象,使用新的dom替换旧的dom就可以,使用createDOMElement方法在进行节点对比时,遵循同级节点比较,执行深度优先的顺序
-
节点删除在节点对比完成之后,然后分析那些节点需要被删除,删除的是一个范围,
删除的就是在节点对比完成之后,旧节点多余新节点说明需要被删除
在diff后,使用oldDOM.childNodes获取旧节点数量对比新的节点length