虛擬DOM是React用來優化與瀏覽器交互的一種技術
在React出現之前,許多現有框架都在每次更改時直接操作DOM。
首先,什麼是DOM?
DOM(文件對像模型)是頁面的樹形表示形式,從<html>
標籤,深入到每個子節點(稱為節點)中。
它保存在瀏覽器的內存中,並直接鏈接到您在頁面中看到的內容。 DOM具有一個API,可用於遍歷,訪問每個節點,對其進行過濾,對其進行修改。
如果您未使用jQuery和朋友提供的抽象API,則該API是您可能多次看到的熟悉語法:
document.getElementById(id)
document.getElementsByTagName(name)
document.createElement(name)
parentNode.appendChild(node)
element.innerHTML
element.style.left
element.setAttribute()
element.getAttribute()
element.addEventListener()
window.content
window.onload
window.dump()
window.scrollTo()
React保留了與React渲染有關的DOM表示形式的副本:虛擬DOM
虛擬DOM解釋
每次DOM更改時,瀏覽器都必須執行兩項密集的操作:重新繪製(對元素的視覺或內容更改不影響相對於其他元素的佈局和位置)和重排(重新計算頁面一部分的佈局-或整個頁面的佈局)。
當需要在頁面上進行更改時,React使用虛擬DOM來幫助瀏覽器使用更少的資源。
您打電話的時候setState()
在一個組件上,指定一個不同於上一個的狀態,React將該組件標記為骯髒的。這很關鍵:React僅在組件顯式更改狀態時更新。
接下來發生的是:
- React會相對於標記為臟組件的組件更新Virtual DOM(帶有一些額外的檢查,例如觸發
shouldComponentUpdate()
) - 運行差異算法以協調更改
- 更新真實的DOM
虛擬DOM為何有幫助:批處理
關鍵是React通過批量更改所有需要更改的元素來對大量更改進行批處理並對真實DOM執行唯一更新,因此瀏覽器必須執行的重繪和重排操作才能呈現更改。只執行一次。
免費下載我的反應手冊
更多反應教程:
- 一個React簡單的應用示例:通過API獲取GitHub用戶信息
- 用React構建一個簡單的計數器
- 用於React開發的VS Code設置
- 如何通過React Router將道具傳遞給子組件
- 使用Electron和React創建一個應用
- 教程:使用React創建電子表格
- 學習React的路線圖
- 了解如何使用Redux
- JSX入門
- 樣式化的組件
- Redux Saga簡介
- React Router簡介
- React簡介
- 反應組件
- 虛擬DOM
- 反應事件
- 反應狀態
- 反應道具
- 反應片段
- React Context API
- 反應PropTypes
- 反應概念:聲明式
- React:如何在點擊時顯示其他組件
- 如何在React JSX內部循環
- 道具與狀態在React中
- 您應該使用jQuery還是React?
- 使用React需要知道多少JavaScript?
- 蓋茨比介紹
- 如何在React中引用DOM元素
- React中的單向數據流
- 反應高階組件
- 反應生命週期事件
- 反應概念:不變性
- 反應概念:純度
- React鉤子簡介
- create-react-app簡介
- 反應概念:組成
- React:演示組件與容器組件
- React中的代碼拆分
- 使用React進行服務器端渲染
- 如何安裝React
- React中的CSS
- 在React中使用SASS
- 在React中處理表單
- 反應嚴格模式
- 反應門戶
- 反應渲染道具
- 測試React組件
- 如何在React中將參數傳遞給事件處理程序
- 如何處理React中的錯誤
- 如何在JSX中返回多個元素
- React中的條件渲染
- 反應,如何將道具轉移到子組件
- 如何在React中獲取輸入元素的值
- 如何使用useState React鉤子
- 如何使用useCallback React鉤子
- 如何使用useEffect React鉤子
- 如何使用useMemo React鉤子
- 如何使用useRef React鉤子
- 如何使用useContext React鉤子
- 如何使用useReducer React鉤子
- 如何將您的React應用程序連接到相同來源的後端
- 到達路由器教程
- 如何使用React Developer Tools
- 如何學習React
- 如何調試React應用程序
- 如何在React中呈現HTML
- 如何修復`dangerouslySetInnerHTML`與React中的錯誤不匹配
- 我如何解決React登錄表單狀態和瀏覽器自動填充的問題
- 如何在本地主機上的React應用程序中配置HTTPS
- 如何修復React中的“在渲染其他組件時無法更新組件”錯誤
- 我可以在條件內使用React掛鉤嗎?
- 將useState與對像一起使用:如何更新
- 如何使用React和Tailwind在代碼塊中移動
- React,添加到DOM時將焦點放在React中的一個項目上
- 反應,在doubleclick上編輯文本