React 簡介:核心概念、組件化架構與聲明式編程

?本文為《React Agent:從零開始構建 AI 智能體》專欄系列文章。 專欄地址:https://blog.csdn.net/suiyingy/category_12933485.html。項目地址:https://gitee.com/fgai/react-agent(含完整代碼示?例與實戰源)。完整介紹:https://blog.csdn.net/suiyingy/article/details/146983582。

????????在當今快速發展的 Web 開發領域,構建高效、可維護且用戶體驗出色的用戶界面(UI)始終是開發者面臨的核心挑戰。傳統的 DOM 操作方式雖然直接,但隨著應用復雜度的提升,頻繁的 DOM 操作會導致性能瓶頸,代碼的可維護性也會急劇下降。2013 年,Facebook(現 Meta)開源了 React.js,這個專注于 UI 層的 JavaScript 庫以其獨特的組件化架構和聲明式編程思想,徹底改變了前端開發的范式。經過十年的發展,React 已成為全球最受歡迎的前端框架之一,Stack Overflow 2024 年開發者調查顯示,40.2% 的專業開發者在使用 React,其生態系統覆蓋了 Web、移動、桌面甚至 VR 應用開發。截至 2025 年,React 最新穩定版為 18.3,新增并發模式、自動批處理等特性,持續引領前端技術發展。其官網地址為https://react.dev/。

圖1 React 官網頁面

????????React 核心理念是基于組件化和聲明式編程,使得開發者能夠以一種直觀且高效的方式構建動態的 Web 應用程序。組件化將 UI 分解為獨立可復用的單元,每個組件封裝了自身的邏輯和視圖,如同搭建積木般構建復雜界面。聲明式編程則讓開發者只需描述“UI 應該是什么樣”,而非“如何實現變化”,React 會自動處理 DOM 更新的具體邏輯。這種思想解放了開發者的思維,將關注點從操作 DOM 轉向管理數據狀態,大大提升了開發效率。它專注于 UI 層,與其他框架(例如 Angular 和 Vue)不同,其并不提供完整的框架解決方案,而是鼓勵通過組合第三方庫和工具來完成特定需求。

????????下面是一個簡單按鈕點擊程序,效果如下圖所示。

function MyButton() {return (<button>I'm a button</button>);
}export default function MyApp() {return (<div><h1>Welcome to FGAI React Agent</h1><MyButton /></div>);
}

圖2 React 示例效果

????????DOM 即文檔對象模型(Document Object Model),它是一種用于表示 HTML 或 XML 文檔的樹形結構,讓程序和腳本能夠動態地訪問和修改文檔的內容、結構和樣式。React 并不直接操作瀏覽器的 DOM,而是構建一個內存中的虛擬 DOM。在虛擬 DOM 中完成必要的操作后,它才將變化應用到實際的瀏覽器 DOM 上。這種方式極為高效,因為它僅對需要修改的部分進行變更,大大減少了直接操作 DOM 帶來的性能損耗。舉例來說,當一個列表項發生變化時,React 通過虛擬 DOM 的比對,僅更新該列表項對應的 DOM 部分,而非整個列表的 DOM 結構。

????????React 的關鍵特點如下。

1 基于組件的架構

????????React 允許將用戶界面拆分為更小的、自包含的組件。組件是一種可復用的、獨立的代碼單元,可以封裝 HTML、CSS 和 JavaScript,能夠顯著提高代碼的可維護性和復用性。每個組件都可以擁有自己的狀態(state)和屬性(props)。以一個簡單的導航欄組件為例,它可能包含自己的狀態來控制菜單的展開與收起,同時通過屬性接收來自父組件的鏈接信息等。這種組件化的方式使得代碼的復用性大大提高,維護和更新也更加便捷。

2 JSX(JavaScript 語法擴展)

????????JSX 是 JavaScript 的一種語法擴展,開發者能夠在 JavaScript 文件中編寫類似 HTML 的代碼。這使得 React 組件的代碼可讀性和表達性更強。例如:

const name = "FGAI React Agent";
const ele = <h1>Welcome to {name}</h1>;

????????這里通過 JSX,將 JavaScript 變量name嵌入到類似 HTML 的標簽中,直觀地創建了一個包含特定文本的標題元素。

3 虛擬 DOM(Virtual DOM)

????????如前所述,React 維護著一個輕量化的實際 DOM 的內存表示。當數據發生變化時,它會高效地更新 DOM 中真正需要改變的部分。這種機制避免了頻繁地直接操作 DOM,提升了應用程序的性能。在一個實時聊天應用中,不斷更新的聊天消息列表,通過虛擬 DOM,它能精準地只添加新消息對應的 DOM 元素,而不影響其他已存在的消息 DOM。

4 單向數據流

????????React 采用單向數據流(Unidirectional Data Flow),即數據從父組件傳遞到子組件。這樣可以確保數據流向清晰,便于調試和狀態管理。子組件通過屬性(props)接收來自父組件的數據,但無法直接將數據返回給父組件。不過,子組件可以與父組件通信,根據提供的輸入來修改父組件的狀態。例如,在一個父子組件構成的表單場景中,父組件傳遞初始表單數據給子組件,子組件通過用戶輸入修改數據后,通過特定的回調函數通知父組件更新狀態。

5 聲明式編程

開發者只需要描述 UI 在不同狀態下的樣子,React 會自動處理 UI 更新的邏輯,而無需手動操作 DOM。他會自動處理 UI 更新的具體邏輯,比如如何查詢 DOM 元素、如何更新元素的屬性或內容、如何處理動畫效果等。例如,在一個電商應用中,當用戶將商品加入購物車時,開發者只需設定購物車圖標旁的商品數量顯示會相應增加,或者商品列表中的“加入購物車”按鈕變為“已加入”狀態等。

立即關注獲取最新動態

點擊訂閱《React Agent 開發專欄》,每周獲取智能體開發深度教程。項目代碼持續更新至React Agent 開源倉庫,歡迎 Star 獲取實時更新通知!FGAI 人工智能平臺https://www.botaigc.cn/

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

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

相關文章

LeetCode100.7 接雨水

對于這題&#xff0c;有一個非常直觀簡潔的思路&#xff1a;水量等于柱子圍成的體積減去柱子的體積。 首先計算每一個高度的體積&#xff0c;相加即為總體積&#xff0c;減去sum(height)即為水的體積。 class Solution { public:int trap(vector<int>& height) {in…

NineData 社區版 V4.1.0 正式發布,新增 4 條遷移鏈路,本地化數據管理能力再升級

NineData 社區版 V4.1.0 正式更新發布。本次通過新增 4 條遷移鏈路擴展、國產數據庫深度適配、敏感數據保護增強?等升級&#xff0c;進一步鞏固了其作為高效、安全、易用的數據管理工具的定位。無論是開發測試、數據遷移&#xff0c;還是多環境的數據管理&#xff0c;NineData…

Go 語言 sqlx 庫使用:對 MySQL 增刪改查

MySQL 作為目前最流行的開源關系型數據庫&#xff0c;其 SQL 語法體系已形成行業標準&#xff0c;相關知識體系龐大且成熟&#xff0c;本文不再對 SQL 基礎進行詳細展開&#xff0c;建議尚未掌握的讀者先行系統學習。本文聚焦于如何使用 Go 語言進行 MySQL 數據庫操作&#xff…

單片機-STM32部分:13、PWM

飛書文檔https://x509p6c8to.feishu.cn/wiki/NjhuwbVP7iaEOikVK95cmJNLnWf PWM&#xff08;Pulse Width Modulation&#xff09;脈沖寬度調制&#xff0c;是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。它是把每一脈沖寬度均相等的脈沖列作為PWM波形&am…

抽獎系統-獎品-活動

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言獲取獎品列表前端頁面活動創建需求分析活動創建后端實現1-控制層實現及校驗活動活動創建后端實現2-保存信息活動插入活動獎品插入 整合活動信息存入redis測試活…

Dense 與 MoE 系列模型架構的全面對比與應用策略

0. 簡介 人工智能領域正經歷著一場架構革命&#xff0c;從傳統的密集連接模型&#xff08;Dense&#xff09;向混合專家模型&#xff08;Mixture of Experts, MoE&#xff09;的轉變。本文將全面剖析這兩種模型架構的本質差異、各自優勢與挑戰&#xff0c;并提供戰略性的選擇框…

代碼隨想錄算法訓練營第四十天

LeetCode題目: 647. 回文子串516. 最長回文子序列 其他: 今日總結 往期打卡 647. 回文子串 跳轉: 647. 回文子串 學習: 代碼隨想錄公開講解 問題: 給你一個字符串 s &#xff0c;請你統計并返回這個字符串中 回文子串 的數目。 回文字符串 是正著讀和倒過來讀一樣的字符串。…

Supabase 的入門詳細介紹

Supabase 是什么&#xff1f; 簡單來說&#xff0c;Supabase 是一個開源的 Firebase 替代品。它提供了一整套后端即服務 (BaaS - Backend as a Service) 的工具&#xff0c;讓你能夠快速構建應用程序的后端&#xff0c;而無需自己從頭搭建和管理服務器、數據庫等基礎設施。 S…

【MySQL】mysql/bin目錄下程序介紹

&#x1f525;個人主頁&#xff1a; 中草藥 &#x1f525;專欄&#xff1a;【MySQL】探秘&#xff1a;數據庫世界的瑞士軍刀 MySQL在安裝完成后&#xff0c;通常會包含以下程序&#xff0c;以Ubuntu上的mysql為例&#xff0c;我們可以查看到 以下是常用的mysql程序 程序名作用…

IDEA+git將分支合并到主分支、IDEA合并分支

文章目錄 一、合并分支二、可能遇到的問題2.1、代碼沖突 開發過程中我們可能在開發分支(dev)中進行開發&#xff0c;等上線后將代碼合并到主分支(master)中&#xff0c;本文講解如何在IDEA中將dev分支的代碼合并到master分支中。 一、合并分支 功能說明&#xff1a;將dev分支的…

通過Ollama讀取模型

通過Ollama讀取模型 前言一、查看本地Ollama上有哪些模型二、調用bge-m3模型1、調用模型2、使用bge-m3進行相似度比較 三、調用大模型 前言 手動下載和加載大模型通常需要復雜的環境配置&#xff0c;而使用Ollama可以避免這一問題。本文將介紹如何調用Ollama上的模型。 一、查…

JS 中 Object.keys() 和 Object.values() 的深度解析與應用

文章目錄 前言一、Object.keys() 和 Object.values() 基礎1. Object.keys()2. Object.values() 二、與 Object.entries() 的對比三、實際應用場景1. 遍歷對象屬性2. 判斷對象是否為空3. 對象與數組的轉換4. 動態屬性操作5. 過濾對象屬性 總結 前言 在 JavaScript 開發中&#…

HCIP(BFD)

一、前言 隨著網絡應用的廣泛部署,網絡發生故障極大可能導致業務異常。為了減小鏈路、設備故障對業 務的影響,提高網絡的可靠性,網絡設備需要盡快檢測到與相鄰設備間的通信故障,以便及時采取措施,保證業務正常進行。BFD(Bidirectional Forwarding Detection,雙向轉發檢測)提供…

Webpack其他插件

安裝html打包插件 const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin) module.exports {entry: path.resolve(__dirname,src/login/index.js),output: {path: path.resolve(__dirname, dist),filename: ./login/index.js,clean:true},Plugin:…

【Linux網絡】網絡層

網絡層 在復雜的網絡環境中確定一個合適的路徑 IP 協議 IPV4 點分十進制[0,255].[0,255].[0,255].[0,255]IPV6 IP地址目標網格目標主機 基本概念 主機:配有IP地址,但是不進行路由控制的設備;路由器:即配有IP地址,又能進行路由控制;節點:主機和路由器的統稱。 兩個問題 路…

跨域的幾種方案

因為瀏覽器出于安全考慮&#xff0c;有同源策略。也就是說&#xff0c;如果協議、域名、端口有一個不同就是跨域&#xff0c;Ajax 請求會失敗。 我們可以通過以下幾種常用方法解決跨域的問題 JSONP JSONP 的原理很簡單&#xff0c;就是利用 <script> 標簽沒有跨域限制…

基于EFISH-SCB-RK3576/SAIL-RK3576的智能安檢機技術方案?

&#xff08;國產化替代J1900的全場景技術解析&#xff09; 一、硬件架構設計? ?核心處理模塊? ?異構計算架構?&#xff1a; ?四核Cortex-A72&#xff08;2.3GHz&#xff09;?&#xff1a;運行X光圖像重建算法&#xff08;FDK反投影&#xff09;&#xff0c;支持雙能譜…

MQ防重復消費----去重表結合 Spring AOP 切面編程,抽象封裝成通用冪等注解

以下內容包含針對 NoMQDuplicateConsumeAspect 的深度面試問答、消息隊列重投遞觸發場景、AOP 切面編程擴展&#xff0c;以及基于已有實現的關鍵要點與步驟總結。文中所有論斷均引用多源資料&#xff0c;以助于您在面試與實戰中全面展示對冪等消費切面及消息重投的理解。 一、深…

[:, :, 1]和[:, :, 0] 的區別; `prompt_vector` 和 `embedding_matrix`的作用

prompt_vector = torch.sum(prompt_embedding * attention_weights.unsqueeze(-1), dim=1) # [1, hidden_dim] prompt_vector = torch.sum(prompt_embedding * attention_weights.unsqueeze(-1), dim=1) 主要作用是通過將 prompt_embedding 與 attention_weights 相乘后再按指…

Dinky 安裝部署并配置提交 Flink Yarn 任務

官方文檔 https://www.dinky.org.cn/docs/1.1/deploy_guide/normal_deploy 版本 dinky 1.1.0、1.2.3 當前最新發布版本為 1.2.3 &#xff0c;但是官方文檔最新穩定版為 1.1 &#xff0c;所以先選擇 1.1.0&#xff0c;驗證通過后&#xff0c;再嘗試 1.2.3 &#xff0c;發現 1…