一文詳細講解HTML/JS/React三者之間的關系及用途
你可以用一個生動的比喻來理解它們:
HTML = 骨骼與結構:定義了一個人的骨架——哪里是頭(
<header>),哪里是手臂(<nav>),哪里是軀干(<main>)。它有形狀,但不會動。CSS = 皮膚與外貌:定義了人的外觀——膚色、發(fā)型、衣服款式(顏色、字體、布局)。它讓人變得好看。
JavaScript = 肌肉與神經:讓人可以運動、思考、與外界交互。比如走路、握手、說話(動畫、邏輯、用戶交互)。
React = 高效的人體改造藍圖:它是一套更科學、更高效的“構建和指揮人體”的系統(tǒng)和方法論。它讓你能像搭樂高一樣,用可復用的“組件”來快速、高效地組裝和管理一個復雜的人體。
一、 三者各自的核心職責
1. HTML - 結構層
是什么:超文本標記語言。它不是編程語言,而是一種標記語言。
干什么:負責定義網頁的內容和結構。它是所有網頁的基礎。
怎么干:使用一系列標簽(如
<h1>、<p>、<div>、<img>)來搭建頁面的骨架。例子:
html
<body> <h1>歡迎來到我的網站</h1> <p>這是一個段落文本。</p> <button>點擊我</button> <!-- 這個按鈕現(xiàn)在只是個擺設 --> </body>
用途:沒有HTML,就沒有網頁。它是信息的載體。
2. JavaScript - 行為層
是什么:一種強大的腳本編程語言。
干什么:負責網頁的行為、邏輯和交互。它讓網頁從靜態(tài)文檔變成動態(tài)應用。
怎么干:通過操作HTML(DOM)和CSS,來實現(xiàn)動態(tài)更新內容、控制多媒體、生成動畫、處理用戶輸入、與服務器通信等。
例子(接上面的HTML):
javascript
// 獲取按鈕元素 const button = document.querySelector('button'); // 給按鈕添加一個點擊事件的監(jiān)聽器 button.addEventListener('click', function() { // 當按鈕被點擊時,改變段落的內容 document.querySelector('p').textContent = '你點擊了按鈕!'; });用途:任何動態(tài)效果、數據驗證、異步加載數據(如無限滾動)、彈出框等都離不開JS。它直接操作DOM(HTML的樹形結構)。
3. React - 高效構建用戶界面的JavaScript庫
是什么:它是一個用于構建用戶界面的JavaScript庫(不是框架,不是語言)。由Facebook開發(fā)并維護。
干什么:它的核心工作是更高效、更聲明式地構建復雜的、數據驅動的交互界面。它尤其擅長管理那些狀態(tài)(數據)會隨時間頻繁變化的界面。
怎么干:它引入了組件化和虛擬DOM的概念。
組件化:將頁面拆分成獨立、可復用的小部件(組件)。每個組件管理自己的結構和邏輯,然后像搭積木一樣組合成完整頁面。
虛擬DOM:React在內存中維護一個輕量級的JS對象(虛擬DOM),用來描述界面應該長什么樣。當數據變化時,React會生成一個新的虛擬DOM,并與舊的進行對比(Diffing),找出最小變化集,然后高效地批量更新真實DOM。這避免了直接操作真實DOM的性能損耗。
例子(用React實現(xiàn)同樣功能):
jsx
// 這是一個React組件 function WelcomeComponent() { // React Hook:管理組件的狀態(tài)(數據) const [text, setText] = useState('這是一個段落文本。'); // 處理點擊事件的函數 const handleClick = () => { setText('你點擊了按鈕!'); // 更新狀態(tài) }; // UI長什么樣?狀態(tài)(text)決定視圖。 return ( <div> <h1>歡迎來到我的網站</h1> <p>{text}</p> {/* 大括號{}用于嵌入JavaScript變量 */} <button onClick={handleClick}>點擊我</button> </div> ); }用途:構建單頁面應用、復雜的后臺管理系統(tǒng)、數據看板、移動應用(React Native)等。幾乎所有現(xiàn)代大型Web應用都在使用React或類似的庫(Vue, Angular)。
二、 三者之間的關系
結論:React是構建在JavaScript之上的,用于更高效地輸出和管理HTML的庫。
JS 是基礎,React 是拓展:你必須先學會JavaScript,才能學好React。React的語法和核心概念(組件、Props、State、Hooks)都是JavaScript(ES6+)的實現(xiàn)。不懂JS直接學React,如同不會走路就想跑步。
React 替代了原始的JS DOM操作:在傳統(tǒng)開發(fā)中,你用
document.querySelector等原生JS方法直接操作DOM。在React中,你不再需要直接操作DOM,而是通過管理“狀態(tài)”,由React自動、高效地根據最新狀態(tài)去更新DOM。你只需要聲明“界面在某種狀態(tài)下應該長什么樣”。它們最終一起工作:瀏覽器最終能運行的,依然是標準的HTML、CSS和JavaScript。React代碼通過打包工具(如Webpack, Vite)進行編譯和打包,最終轉換成一捆瀏覽器能直接理解的、優(yōu)化后的純JS代碼。這捆JS代碼會在瀏覽器中運行,并動態(tài)地生成和操作HTML。
總結與用途對比
| 技術 | 角色 | 用途 | 一句話概括 |
| :--- | :--- | :--- | :--- |
| HTML | 結構 | 搭建網頁骨架,定義內容結構 | “是什么” - 定義頁面上有什么內容 |
| JavaScript | 行為 | 添加交互邏輯,動態(tài)操作頁面 | “做什么” - 定義頁面如何對事件做出反應 |
| React | 高效構建 | 用組件化和聲明式的方式,大規(guī)模地、高性能地構建復雜用戶界面 | “怎么更好地做” - 一套更科學的UI構建和管理方案 |
給你的學習建議:
絕對基礎:首先扎實掌握 HTML 和 CSS,能做出靜態(tài)頁面。
核心關鍵:花大量時間深入學習現(xiàn)代JavaScript(ES6+特性,如箭頭函數、解構、模塊化、異步編程)。
進階工具:在你熟練掌握JS之后,再開始學習 React。你會發(fā)現(xiàn)自己是在用已經學會的JS知識去理解React,事半功倍。
簡歷中提到了“熟悉React等原型設計”,這表明你已經有了初步的概念。接下來需要深入理解其核心思想(組件、狀態(tài)管理、數據流)而不僅僅是語法,并嘗試用React去重構或實現(xiàn)一個更復雜的項目,這將極大提升你的競爭力。
附:react代碼與javascript區(qū)別
React 代碼的書寫格式和以前的 JS 有很大的不同,下面通過對這段代碼進行分析了解一下他。
以前使用 JavaScript 定義一個變量使用 var,ES6 加入了 const 關鍵字,用來定義一個常量:
const div = document.createElement('div');
ReactDOM.render(…) 是渲染方法,所有的 js,html 都可通過它進行渲染繪制,他有兩個參數,內容和渲染目標 js 對象。
內容就是要在渲染目標中顯示的東西,可以是一個 React 部件,也可以是一段HTML或TEXT文本。渲染目標JS對象,就是一個DIV或TABEL,或TD 等HTML的節(jié)點對象。
ReactDOM.render(<App />, div);
unmountComponentAtNode() 這個方法是解除渲染掛載,作用和 render 剛好相反,也就清空一個渲染目標中的 React 部件或 html 內容。
ReactDOM.unmountComponentAtNode(div);
到此這篇關于HTML/JS/React三者之間的關系及用途的文章就介紹到這了,更多相關HTML/JS/React關系及用途內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
UniApp使用manifest.json應用配置的超詳細教學
這篇文章主要給大家介紹了關于uni-app應用配置manifest.json最全最詳細配置,manifest.json文件是應用的配置文件,用于指定應用的名稱、圖標、權限等,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-01-01
JavaScript 中字符串和數組的概念解析與多角度對比區(qū)分
JavaScript中的字符串和數組是兩種重要的數據結構,各有特點和應用場景,字符串主要用于文本處理,是不可變的;數組用于存儲有序集合,是可變的,理解它們的區(qū)別和應用場景,有助于編寫更高效和易維護的代碼,感興趣的朋友跟隨小編一起看看吧2024-11-11
js動態(tài)添加表格數據使用insertRow和insertCell實現(xiàn)
這篇文章主要介紹了js動態(tài)添加表格數據并使用insertRow和insertCell實現(xiàn),需要的朋友可以參考下2014-05-05
js解析xml字符串和xml文檔實現(xiàn)原理及代碼(針對ie與火狐)
分別針對ie和火狐分別作了對xml文檔和xml字符串的解析,考慮到了瀏覽器的兼容性,至于在ajax環(huán)境下解析xml,其實原理是一樣的,只不過放在了ajax里,還是要對返回的xml進行解析,感興趣的朋友可以了解下,或許對你學習js解析xml有所幫助2013-02-02
childNodes.length與children.length的區(qū)別
childNodes.length與children.length的值常不一樣。2009-05-05

