摘要:但是我一直信奉一個原則,即但凡復雜的知識,理解之后都只需要記憶簡單的東西,而想簡單精確描述一個復雜知識,是極困難的事。兩個相同的節點,虛擬會認為是同一個節點,從而對其進行比較。
前言:
關于react的虛擬dom以及每次渲染更新的dom diff,網上文章很多。但是我一直信奉一個原則,即:但凡復雜的知識,理解之后都只需要記憶簡單的東西,而想簡單、精確描述一個復雜知識,是極困難的事。
正文dom diff是什么?
1.從根節點開始遍歷所有節點;
2.對于不同類型的標簽,刪除原標簽,新建標簽;
3.對于類型相同、屬性不同的標簽,只修改屬性;
4.對于同一個父節點下的復數同類型標簽(即列表類型),基于key對比、修改。
-遍歷用的是前序遍歷(先序遍歷)
關于2:-不同類型的標簽是指:比如div和span就是不同類型的標簽
-如果同一個位置的標簽類型改變(依然以div和span為例),那么直接刪除div標簽,新建一個span標簽,重新渲染。原本的div標簽里的一切都跟新的span標簽沒有關系
-對于自定義的組件比如
-標簽位置只相對于父節點有意義。假設原本A節點的父節點是B,更新后A節點的父節點是C,那么對于dom diff來說,原本的A節點會被銷毀,在C節點下的A節點是一個新的節點,跟原本的A節點沒有關系
-這一個比較好理解,對于僅僅屬性不同的標簽,修改屬性即可
關于4-假設一個div下有五個span節點,此時我們要插入一個節點
虛擬dom并不知道插入后是ABFCDE,而會認為除了AB以外的節點都改變了
所以對于虛擬dom來說此時是ABGHIJ,付出了額外的消耗。
于是react引入了key的概念。兩個key相同的節點,虛擬dom會認為是同一個節點,從而對其進行比較。引入了key之后,react就知道節點是ABFCDE了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103628.html
摘要:作者兩年經驗第一家任職的是個小公司第二家算是二線互聯網公司各待了一年吧能有機會去阿里面試很驚喜先來和大家分享一下面試經歷電話面試初探因為還在職的緣故電話面試從晚上點鐘開始持續了半個小時左右一開始的時候特比緊張甚至聲音略有些顫抖簡單自我介紹做 作者兩年經驗, 第一家任職的是個小公司, 第二家算是二線互聯網公司, 各待了一年吧... 能有機會去阿里面試很驚喜! 先來和大家分享一下面試經歷....
摘要:但在中會有些不同,包含表單元素的組件將會在中追蹤輸入的值,并且每次調用回調函數時,如會更新,重新渲染組件。在構造函數中調用的目的是什么在被調用之前,子類是不能使用的,在中,子類必須在中調用。將使用單個事件監聽器監聽頂層的所有事件。 已經開源 地址:https://github.com/nanhupatar...關注我們團隊:showImg(https://segmentfault.co...
摘要:對同一層級的子節點進行處理時,會根據進行簡要的復用。二性能優化方案由于中性能主要耗費在于階段的算法,因此性能優化也主要針對算法。此時最常用的優化方案即為方法。或者直接使用,原理一致。 一、從React原理談起 react是什么? showImg(https://segmentfault.com/img/bVbcYvf?w=1140&h=384); react是用于構建用戶界面的JS框架...
閱讀 3406·2021-11-25 09:43
閱讀 3464·2021-11-19 09:40
閱讀 2464·2021-10-14 09:48
閱讀 1283·2021-09-09 11:39
閱讀 1920·2019-08-30 15:54
閱讀 2821·2019-08-30 15:44
閱讀 1994·2019-08-29 13:12
閱讀 1543·2019-08-29 12:59