React 中虛擬DOM是什么,為什么需要它?

注意:本節主要講React中的虛擬DOM,但是虛擬DOM并不是React中特有的內容。

1. React 中虛擬 DOM是什么?

虛擬DOM是對真實DOM的描述,虛擬DOM是JS對象,實際上就是 JSX 通過 babel 轉換成 React.createElement(),然后這個函數執行后變成的 JS 對象。關于JSX的介紹可以參考我的這篇文章 JSX 代碼是如何成為 DOM 的?。

2. React 中虛擬DOM是如何工作的?

虛擬DOM在組件掛載和更新階段都會出現,工作流程如下:

  • 掛載階段:React 將結合 JSX 的描述,構建出虛擬 DOM 樹,然后通過 ReactDOM.render 實現虛擬 DOM 到真實 DOM 的映射。

  • 更新階段:頁面的變化在作用于真實 DOM 之前,會先作用于虛擬 DOM,虛擬 DOM 將在 JS 層借助算法先對比出具體有哪些真實 DOM 需要被改變,然后再將這些改變作用于真實 DOM。

3. React 中為什么需要虛擬DOM?

使用虛擬DOM主要有下面三方面的優勢:

  1. 提升性能

    傳統的web開發中都是直接操作真實DOM來更新頁面,這些操作非常消耗性能,特別是在數據頻繁變化的情況下。

  2. 提高開發效率

    手動操作DOM非常麻煩而且容易出錯,通過使用虛擬 DOM可以將更新邏輯抽象為對虛擬DOM的操作,也就是對JS對象的操作。

  3. 跨平臺兼容性

    虛擬 DOM 是對真實渲染內容的一層抽象。若沒有這一層抽象,那么視圖層將和渲染平臺緊密耦合在一起,為了描述同樣的視圖內容,你可能要分別在 Web 端和 Native 端寫完全不同的兩套甚至多套代碼。但現在中間多了一層描述性的虛擬 DOM,它描述的東西可以是真實 DOM,也可以是iOS 界面、安卓界面、小程序…同一套虛擬 DOM,可以對接不同平臺的渲染邏輯,從而實現“一次編碼,多端運行”,如下圖所示。

完,如有不恰當地方歡迎指正。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/206951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206951.shtml
英文地址,請注明出處:http://en.pswp.cn/news/206951.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

8.3 C++11對Unicode的支持

一、C11對Unicode的支持 在C98中,引入wchar_t對Unicode支持,但是后來由于不同平臺下wchar_t的寬度并不相同(8,16,32位),導致可移植性受到影響。因此從C11開始引入了char16_t、char32_t以及原有的char,分別存儲utf16,u…

邊緣端部署的典型目標識別網絡

邊緣端(Edge)部署深度學習目標檢測網絡通常涉及到在資源受限的設備上執行模型推斷。這里有一些邊緣端部署深度學習目標檢測網絡的常見策略和技術: 輕量化模型: 選擇或設計輕量級的深度學習模型,例如MobileNet、Squeez…

來自OpenAI的官方解釋:ChatGPT中的GPTs與Assistants API的區別是什么?有什么差異?

本文原文來自DataLearnerAI的官方網站: 來自OpenAI的官方解釋:ChatGPT中的GPTs與Assistants API的區別是什么?有什么差異? | 數據學習者官方網站(Datalearner)https://www.datalearner.com/blog/1051701996595465 OpenAI發布的產…

圖解算法數據結構-LeetBook-查找01_第一個只出現一次的字符

某套連招動作記作僅由小寫字母組成的序列 arr,其中 arr[i] 第 i 個招式的名字。請返回第一個只出現一次的招式名稱,如不存在請返回空格。 示例 1: 輸入:arr “abbccdeff” 輸出:‘a’ 示例 2: 輸入&…

3D Web輕量引擎HOOPS Communicator如何實現對大模型的渲染支持?

除了讀取輕松外,HOOPS Communicator對超大模型的支持效果也非常好,它可以支持30GB的包含70萬個零件和3.5億個三角面的Catia裝配模型! 那么它是如何來實現對大模型的支持呢? 我們將從以下幾個方面與大家分享:最低幀率…

python核心階段(五)—— 面向對象三大特性

1.封裝 概念:封裝主要是指將一些屬性和相關方法封裝在一個對象中,對外隱藏內部具體實現細節 作用:1)使用起來更加方便,類似于提供了一個工具箱 2)保證數據的安全(設置私有屬性) 3&am…

高精度加法,減法,乘法,除法(下)(C語言)

前言 上一篇博客我們分享了高精度加法,減法,這一期我將為大家講解高精度乘法和高精度除法。那讓我們開始吧! 對加法和減法感興趣的話就點我 文章目錄 1,乘法2,除法3,尾聲 1,乘法 讓我們想想我們平時做數學…

openpyxl讀取Excel文件忽略單元格公式僅讀取所顯示的值

目錄 前言解決方案先不加:看讀取信息加上參數:看讀取信息完整代碼 前言 我們在讀取Excel文件時,假如某行或者某列是利用公式生成的,但是我們在利用openpyxl進行讀取時,發現讀取到的是公式,而非顯示的值 解…

Java并行和并發有什么區別?

Java并行和并發有什么區別? 并行和并發是兩個在多線程編程中經常使用的概念,它們描述了不同的多任務處理方式。 并發(Concurrency): 定義:并發是指多個任務共享資源,但是并不一定同時執行。它強…

pipe函數、SIGCHLD、execvp

pipe函數 以下是一個使用C語言編寫的通過管道&#xff08;pipe&#xff09;進行進程間通信的示例代碼&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h>int main() {int pipefd[2];pid_t pid;char b…

[⑧ADRV902x]: Digital Pre-Distortion (DPD)學習筆記

前言 DPD 數字預失真技術&#xff0c;是一種用于抑制功率放大器非線性失真的方法。 它通過在信號輸入功率放大器&#xff08;PA&#xff09;之前插入一個預失真模塊&#xff0c;對輸入信號進行適當的調制&#xff0c;以抵消功率放大器引起的非線性失真&#xff0c;使功率放大器…

Ubuntu 安裝 CUDA 和 cuDNN 詳細步驟

我的Linux系統背景&#xff1a; 系統和驅動都已安裝。 系統是centos 8。查看自己操作系統的版本信息&#xff1a;cat /etc/issue或者是 cat /etc/lsb-release 用nvidia-smi可以看到顯卡驅動和可支持的最高cuda版本&#xff0c;我的是12.2。驅動版本是535.129.03 首先&#…

[足式機器人]Part2 Dr. CAN學習筆記-數學基礎Ch0-9閾值選取-機器視覺中應用正態分布和6-sigma

本文僅供學習使用 本文參考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN學習筆記-數學基礎Ch0-9閾值選取-機器視覺中應用正態分布和6-sigma 5M1E——造成產品質量波動的六因素 人 Man Manpower 機器 Machine 材料 Material 方法 Method 測量 Measurment 環境 Envrionment DMAI…

RESTful 服務的開發

目錄 1.RESTful風格介紹2.使用 RESTful 風格設計的用戶管理 Web API 的示例代碼13.RESTful 風格設計的用戶管理 Web API 的示例代碼2 1.RESTful風格介紹 RESTful&#xff08;Representational State Transfer&#xff09;是一種軟件架構風格&#xff0c;用于設計網絡應用程序的…

模塊電源(六):前饋電容

一、前饋電容&#xff1a; 前饋電容是與電阻分壓的頂部電阻 并聯的"可選電容器" 二、計算及仿真&#xff1a; 1、計算 無前饋電容時&#xff0c;輸出電壓&#xff1a;&#xff1b;有前饋電容時&#xff0c;輸出電壓&#xff1a;&#xff0c;(其中&#xff0c;&am…

Java工程找不到javax.xml.bind.annotation包

文章目錄 問題解決方法參考 問題 最近Java工程找不到javax.xml.bind.annotation包&#xff0c;進行了解決。 解決方法 參考 stackoverflow: package javax.xml.bind.annotation does not exist error javax.xml.bind這個庫從Java 11版本就被移除了&#xff0c;缺失了這個包…

crmeb本地開發配置代理

crmeb 是一個開源的商城系統&#xff0c; v5 版本是一個前后端分離的項目&#xff0c; 我們從git倉庫中下載下來的是一個文件夾&#xff0c;其結構是這樣的 我的系統沒有使用docker &#xff0c;使用的是 laragon 的系統 所以首先我們要在 nginx 中配置 之后&#xff0c; 我們…

WebStorm:Mac/Win上強大的JavaScript開發工具

WebStorm是JetBrains公司開發的針對Mac和Windows系統的JavaScript開發工具。它為開發者提供了一站式的代碼編輯、調試、測試和版本控制等功能&#xff0c;幫助你更高效地進行Web開發。新版本的WebStorm 2023在性能和用戶體驗方面都做出了重大改進&#xff0c;讓你的JavaScript開…

為什么感染HPV的人越來越多?勁松中西醫結合醫院專家發表看法

近年來&#xff0c;HPV感染率在我國呈現上升趨勢&#xff0c;引起了社會的廣泛關注。HPV是一種人乳頭瘤病毒&#xff0c;主要通過性接觸傳播&#xff0c;也是引起宮頸癌的主要原因之一。那么&#xff0c;為什么我國的HPV感染率如此高呢&#xff1f; 首先&#xff0c;我們需要了…

深度學習疲勞檢測 駕駛行為檢測 - python opencv cnn 計算機競賽

文章目錄 0 前言1 課題背景2 相關技術2.1 Dlib人臉識別庫2.2 疲勞檢測算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手機檢測3.4 抽煙檢測3.5 喝水檢測 4 最后 0 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度學習加…