react diff 学习之tree diff


tree diff主要针对的是react dom节点跨层级的操作。什么是跨层级的操作呢?

除同级之外的操作都是跨层级。比如A节点下有B和C,A的同级有个小狗节点,现在把整个A节点移到小狗节点下。

对于这种跨层级操作,react只会进行创建和删除操作,当根节点发现子节点A消失了,就会直接销毁A,当小狗节点发现多了一个子节点A,则会创建新的A(包括它的子节点B和C)。此时,diff的执行情况:createA  →createB →createC →deleteA 。

由此可以发现,当出现跨层级移动时,并不会出现想象中的移动操作,而是以A为根节点的整个树被重新创建。这是一种影响React性能的操作,因此官方不建议进行DOM节点跨层级的操作。

那么从这里我们可以得到一个启示,什么启示呢?尽量用css来显示或者隐藏节点,而不是真正地移除或者添加dom节点。

 

posted @ 2024-09-03 22:13  飞向火星  阅读(3)  评论(0编辑  收藏  举报