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節點。