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

