React 運作原理 – React 白話文運動 05

更新於 發佈於 閱讀時間約 8 分鐘

前言

React 是開發網頁、手機前端最流行的 JavaScript 套件之一。React 由 Meta(前身為 Facebook)開發,使開發人員能夠創建可重覆使用的元件來完成前端頁面。

不過這邊要注意,嚴格說起來,React 並不是一個框架。這是因為它只負責呈現 UI 的元件。不過,React 為 Angular 和 Vue 等框架提供了另一種解決方式,使我們可以與它一起完成覆雜的前端頁面功能。

這篇文章將會解釋 React 的工作原理、特性,並講解前端開發者使用 React.js 的好處。

為什麼需要前端框架?

在回答這一個問題,不妨思考一個問題,為何我們需要使用前端框架?在網頁開發領域來說,前端框架確實是現代才有的工具,而不管是哪一個技術或是工具都是為了解決某個問題而被開發出來的。在舊有的網頁,HTML、CSS 甚至只需要一些些的 JavaScript 就可以完成一個靜態頁面。

然而隨著科技越來越發達,越來越多人使用網路後,網頁功能也越來越複雜,無論是會員註冊、登入、地圖功能、論壇發文留言功能…等等,早已不是一個簡單的網頁,就可以解決的。

因此開始有了前端工程師以及後端工程師,前端工程師負責 UI \ UX、視覺化介面、資料與狀態視覺化…等等。後端工程師負責資料處理、資料庫操作、伺服器管理、 API 開發…等等。

也因為頁面越來越複雜,不再是使用 JavaScript 或是 Jquery 就有辦法處理各種複雜的前端狀態,因此有了框架的誕生。

React、Vue、Angular 則是為了處理複雜的前端狀態而被發展出來的。

什麼是 React JavaScript ?

React 是一個功能強大的 JavaScript 套件,可通過模組化的方式創建前端介面。它通過引入宣告式和使用模組化的方法徹底改變了前端 UI 開發。

與 jQuery 中的 DOM 操作不同,React 使用 Virtual DOM 來優化性能。 React JavaScript(或 React.js)可處理覆雜的前端畫面,為開發者提供了一種結構化的高效方法。

React 運作原理?

React 引入了 JSX,這是一種語法糖,可無縫結合 JavaScript 和 HTML 程式碼。JSX 標簽類似於 XML,但有一些不同。

例如:React 使用 className 代替了 CSS 的傳統 class 屬性。數字值和表達式用大括號括起來,而引號表示字符串,這與 JavaScript 類似。

React 元素

React 可以透過其內建的函式,創建出各種 HTML 的 DOM(Document Object Model),因此我們先來複習一下基本的 HTML 語法。

<body>
<h1>Hello World</h1>
<ul>
<li>dog</li>
<li>cat</li>
</ul>
</body>

由上面的 HTML 的結構可以知道 HTML 元素監視以樹狀結構相連的,且有一個根元素(root element)有兩個子元素(child element),第一個子元素為 h1,第二個子元素為 ul,並且如果端看 ul 清單來說的話,ul 本身也是一個父元素(parent element),裡面包含了兩個 li 的子元素。

我們是透過這些 DOM 來讓瀏覽器知道我們的頁面長什麼樣子的,因此 React 的概念也是如此,透過 React 開發的函數,建立這些元素,再將這些元素組合起來變成一個大型的 HTML,並且顯示頁面。

React DOM

當我們在創建一個元素後,我們需要將創建完成的 DOM 呈現在頁面中,我們稱這個動作為渲染(Render)。我們可以使用 ReactDOM 內建的 render 將我們已創建的 React 元素渲染(Render)至瀏覽器中。

const dish = React.createElement("h1", "Hello World");
ReactDOM.render(dish, document.getElementById("root"));

透過以上的JavaScript程式碼,會先建立一個HTML元素如下,並且將這個元素傳入HTML裡面。

<div id="root">
<h1>Hello World</h1>
</div>

當然上面是單一比較簡單的 DOM,這邊也提供一個 ReactDOM 中,render list 方式建立的 HTML 範例。

const hello = React.createElement("h1", "Hello")
const world = React.createElement("h1", "World")

ReactDOM.render([hello, world], document.getElementById("root"))

為什麽使用 React.js?

全球數百家大公司,都在使用 React 製作自己的系統,以下也會簡單介紹使用React 的優點。

易於使用

通常具有 JavaScript 技術的 Web 開發工程師可以快速學會如何使用 React,因為它依賴於 Pure JavaScript 並也有模組化以及物件導向的概念,因此上手難度也會相對較低。

如果需要進一步學習 JavaScript,許多網站都提供免費的教學,可以先了解  JavaScript 的基礎知識後,再閱讀 React,以簡化前端開發流程。

可重用元件

React 可讓您重覆使用為其他應用程式的元件。舉例來說:如果開發了某一個頁面的表單,其他頁面如果需要使用,可以直接使用該表單的元件,不需要再開發一次。

此外,React 還可以在其他元件中繼續使用更小型的元件,以完成複雜的功能,而不會有太多肥大的程式碼。每個 React 元件都有自己的狀態,因此可以更容易維護。

簡易的前端元件實作

React 可將 JavaScript 對象與 HTML 語法和標記相結合。還可以寫元件,並通過 JSX (之後的章節也會繼續講解此名詞),將 React 添加到現有的 HTML 頁面。 JSX 簡化了多功能呈現,也能保持程式碼簡潔,又不會限制系統的功能。

高性能

Virtual Dom 允許 React 快速地更新 DOM Tree。通過在特別的機制以及演算法,React 可以避免過多的重新渲染,以免影響性能。

搜索引擎優化

React 可通過提高性能和縮短 JavaScript 程式碼加載時間來改善加在時間,近一步搜索引擎優化(SEO)。Virtual DOM 的實現有助於加快頁面速度。

它還能通過 Server Side 優化 SEO。解決了純 JavaScript 網站所面臨的挑戰之一,因為搜索引擎通常會發現這些網站難以抓取且耗時較長。

結語

這一篇正式進入了 React 世界,講解了 React 運行的原理,包含是如何透過JavaScript 產生 HTML DOM,變成一個頁面的。

React 團隊的不斷改進使 React 更容易使用,能與各種技術結合,包括 Bootstrap、Tailwind CSS、Axios、Redux 和 Firebase。

在 Node.js 和 NGINX 的協助下,在 VPS 上部署 React 應用程序也很簡單。

如果有任何建議與疑問也歡迎留言!

如果喜歡此系列文章,請不吝於按下喜歡及分享,讓更多人看到唷~


備註

目前文章已移至  React 運作原理 – React 白話文運動 05

未來文章一併更新於此網站 Hogan.B Lab

並且包含多語系 繁體中文英文日文簡體中文

觀看分類:React 白話文運動其他系列



React 白話文運動系列

JavaScript 高階函式 – React 白話文運動 04

JavaScript Async Await – React 白話文運動 03

JavaScript ES6 Object – React 白話文運動 02

JavaScript ES6 – React 白話文運動 01


希望能透過「React框架白話文運動」系列文章,利用口語化語表以及簡單的程式碼範例,能讓讀者更明白React的各種應用。 系列文章會講述以下: 1. 了解 ES6 JavaScript 語法 2. 了解 React 的運作原理 3. 了解 React 的狀態管理 4. 使用 React Hook管理狀態並且存取資料
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
這一篇會介紹非常重要的 JavaScript 函式概念 - 高階函式(Higher-order function),高階函數是將一個或多個函數作為參數,或將一個函數作為結果返回的函數。在本文中,我們將深入探討什麽是高階函數、使用高階函數的好處以及如何在實際應用中使用高階函數,函式導向是什麼?
歡迎來到 React 白話文運動第三篇,今天我們將深入探討 JavaScript 中的非同步操作,並介紹兩個重要的關鍵字:Async 與 Await。在這篇文章中,我們將透過實例演示非同步操作的概念,以及如何使用 Promise、Fetch、Async 和 Await 來更有效地處理非同步程式。
今天會接續介紹 JS ES6 其他新穎的語法,物件解構(Object Destructuring)物件語法強化(Object Literal Enhancement)陣列解構(Array Destructuring)延展運算子(Spread Operator)。
在進入到 React 前端框架之前,幫讀者複習有關 JavaScript 的知識。此篇著重,JavaScript 的歷史、let & const & var 差異、樣板字面值( Template Literals )、箭頭函式( Arrow Function )JS ES6 一個非常重要的前置知識。
這一篇會介紹非常重要的 JavaScript 函式概念 - 高階函式(Higher-order function),高階函數是將一個或多個函數作為參數,或將一個函數作為結果返回的函數。在本文中,我們將深入探討什麽是高階函數、使用高階函數的好處以及如何在實際應用中使用高階函數,函式導向是什麼?
歡迎來到 React 白話文運動第三篇,今天我們將深入探討 JavaScript 中的非同步操作,並介紹兩個重要的關鍵字:Async 與 Await。在這篇文章中,我們將透過實例演示非同步操作的概念,以及如何使用 Promise、Fetch、Async 和 Await 來更有效地處理非同步程式。
今天會接續介紹 JS ES6 其他新穎的語法,物件解構(Object Destructuring)物件語法強化(Object Literal Enhancement)陣列解構(Array Destructuring)延展運算子(Spread Operator)。
在進入到 React 前端框架之前,幫讀者複習有關 JavaScript 的知識。此篇著重,JavaScript 的歷史、let & const & var 差異、樣板字面值( Template Literals )、箭頭函式( Arrow Function )JS ES6 一個非常重要的前置知識。
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
先從react開始: 其實市面上有許多前端框架像是react,angular,vue... 至於為什麼我會選擇react…
Thumbnail
此篇主要紀錄PWA開發過程心得,內容為PWA有什麼特色,為何React可以使PWA成為接近App的操作體驗,以概念敘述與簡單開發流程紀錄來介紹PWA。 什麼是漸進式網路應用程式(PWA) PWA擁有傳統網頁和移動應用的優點,使網頁應用程序可以像應用程序一樣運行,提供更加優越的用戶體驗
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
在當今這個數位化的時代,網頁無處不在,我們每天都在使用互聯網瀏覽網頁,查找資訊、分享內容、購物等等。然而,網頁的背後是什麼?為什麼網頁能夠呈現出如此多元化的內容?
Thumbnail
Vite 是由 Vue 開發者 Evan You 所開發出來,用來加快、優化程式碼打包的工具,在這裡我們不免會需要提到大部分前端開發者可能都會聽過、使用過的前端工具:Webpack。 在那之前,我們先來聊聊為什麼前端會需要所謂的打包工具呢?
Thumbnail
前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
Thumbnail
前端開發者常會遇到需要網頁素材的情況,雖然在公司中都可能有可以配合的平面設計師或是UIUX設計師,但在這個多工高效的時代不免也需要前端開發者也可以處理簡單的設計,也可提升設計審美或與設計師溝通的能力。 然而前端開發者也算是擁有設計師的天賦,透過程式碼來完成平面設計,將網頁的每個介面都視為平面設計,
Thumbnail
在 2021 年的剛轉職成為前端工程師的時候,我在面試時滿常會被詢問到 JavaScript 中閉包的議題,當時候自己回答的滿差的,於是在 2022 年時,我寫了一系列的有關於函式程式設計鐵人賽的文章, 裡頭就有簡單提到有關於閉包的議題。
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
先從react開始: 其實市面上有許多前端框架像是react,angular,vue... 至於為什麼我會選擇react…
Thumbnail
此篇主要紀錄PWA開發過程心得,內容為PWA有什麼特色,為何React可以使PWA成為接近App的操作體驗,以概念敘述與簡單開發流程紀錄來介紹PWA。 什麼是漸進式網路應用程式(PWA) PWA擁有傳統網頁和移動應用的優點,使網頁應用程序可以像應用程序一樣運行,提供更加優越的用戶體驗
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
在當今這個數位化的時代,網頁無處不在,我們每天都在使用互聯網瀏覽網頁,查找資訊、分享內容、購物等等。然而,網頁的背後是什麼?為什麼網頁能夠呈現出如此多元化的內容?
Thumbnail
Vite 是由 Vue 開發者 Evan You 所開發出來,用來加快、優化程式碼打包的工具,在這裡我們不免會需要提到大部分前端開發者可能都會聽過、使用過的前端工具:Webpack。 在那之前,我們先來聊聊為什麼前端會需要所謂的打包工具呢?
Thumbnail
前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
Thumbnail
前端開發者常會遇到需要網頁素材的情況,雖然在公司中都可能有可以配合的平面設計師或是UIUX設計師,但在這個多工高效的時代不免也需要前端開發者也可以處理簡單的設計,也可提升設計審美或與設計師溝通的能力。 然而前端開發者也算是擁有設計師的天賦,透過程式碼來完成平面設計,將網頁的每個介面都視為平面設計,
Thumbnail
在 2021 年的剛轉職成為前端工程師的時候,我在面試時滿常會被詢問到 JavaScript 中閉包的議題,當時候自己回答的滿差的,於是在 2022 年時,我寫了一系列的有關於函式程式設計鐵人賽的文章, 裡頭就有簡單提到有關於閉包的議題。