vue 虛擬DOM(vnode)更新機制,difff 算法

vue采用同層節(jié)點比較,從最外面一級,依次向下對比。

下圖中,左邊為原始節(jié)點結構,右側為虛擬DOM更新后的節(jié)點結構。

一、移動節(jié)點(同級下,各節(jié)點使用不同標簽)


可能是把B節(jié)點直接移動到D后面,也可能是把D移動到B前面,再把C移動到B前面。

二、刪除新建(一)(同級下,各節(jié)點使用不同標簽)


同時刪除C節(jié)點和其下的E、F子節(jié)點,然后在B節(jié)點下面分別新建C節(jié)點和E、F節(jié)點

三、刪除新建(二)(同級下,各節(jié)點使用不同標簽)


在比對過程中,發(fā)現C節(jié)點不存在了,就會把C節(jié)點,連帶E、F一并刪除,然后新建G節(jié)點和E、F節(jié)點。

四、更新刪除新建(無key)(同級下,各節(jié)點使用相同標簽)

B1和B2調換順序,先刪除B2下面的E、F,后再新建E、F節(jié)點。比較浪費資源,不能很好的復用節(jié)點。

五、移動(有key)(同級下,各節(jié)點使用相同標簽)

每個節(jié)點都有了key這個唯一的標識符,會被判定每個節(jié)點都是唯一的,直接移動節(jié)點即可。

六、插入(有key)(同級下,各節(jié)點使用相同標簽)

如果沒有key,就會是:B2 => B4, B3=>B2, 新建B3;
如果有key,直接在B2前面插入B4。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容