- ReactJS 教程
- ReactJS - 首頁
- ReactJS - 簡介
- ReactJS - 路線圖
- ReactJS - 安裝
- ReactJS - 特性
- ReactJS - 優缺點
- ReactJS - 架構
- ReactJS - 建立 React 應用
- ReactJS - JSX
- ReactJS - 元件
- ReactJS - 巢狀元件
- ReactJS - 使用新建立的元件
- ReactJS - 元件集合
- ReactJS - 樣式
- ReactJS - 屬性 (props)
- ReactJS - 使用屬性建立元件
- ReactJS - props 驗證
- ReactJS - 建構函式
- ReactJS - 元件生命週期
- ReactJS - 事件管理
- ReactJS - 建立一個事件感知元件
- ReactJS - 在 Expense Manager 應用中引入事件
- ReactJS - 狀態管理
- ReactJS - 狀態管理 API
- ReactJS - 無狀態元件
- ReactJS - 使用 React Hooks 進行狀態管理
- ReactJS - 使用 React Hooks 進行元件生命週期管理
- ReactJS - 佈局元件
- ReactJS - 分頁
- ReactJS - Material UI
- ReactJS - Http 客戶端程式設計
- ReactJS - 表單程式設計
- ReactJS - 受控元件
- ReactJS - 非受控元件
- ReactJS - Formik
- ReactJS - 條件渲染
- ReactJS - 列表
- ReactJS - Keys
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 動畫
- ReactJS - Bootstrap
- ReactJS - 地圖
- ReactJS - 表格
- ReactJS - 使用 Flux 管理狀態
- ReactJS - 測試
- ReactJS - CLI 命令
- ReactJS - 構建和部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 簡介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定義 Hooks
- ReactJS 高階
- ReactJS - 可訪問性
- ReactJS - 程式碼分割
- ReactJS - 上下文
- ReactJS - 錯誤邊界
- ReactJS - 轉發 Refs
- ReactJS - 片段
- ReactJS - 高階元件
- ReactJS - 整合其他庫
- ReactJS - 最佳化效能
- ReactJS - Profiler API
- ReactJS - 門戶
- ReactJS - 無 ES6 ECMAScript 的 React
- ReactJS - 無 JSX 的 React
- ReactJS - 調和
- ReactJS - Refs 和 DOM
- ReactJS - 渲染 Props
- ReactJS - 靜態型別檢查
- ReactJS - 嚴格模式
- ReactJS - Web Components
- 其他概念
- ReactJS - 日期選擇器
- ReactJS - Helmet
- ReactJS - 內聯樣式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 輪播圖
- ReactJS - 圖示
- ReactJS - 表單元件
- ReactJS - 參考 API
- ReactJS 有用資源
- ReactJS - 快速指南
- ReactJS - 有用資源
- ReactJS - 討論
ReactJS - 架構
React 庫建立在堅實的基礎之上。它簡單、靈活且可擴充套件。正如我們之前學到的,React 是一個用於在 Web 應用中建立使用者介面的庫。React 的主要目的是讓開發者能夠使用純 JavaScript 建立使用者介面。通常,每個使用者介面庫都會引入一種新的模板語言(我們需要學習)來設計使用者介面,並提供在模板內或單獨編寫邏輯的選項。
React 並沒有引入新的模板語言,而是引入了以下三個簡單的概念:
React 元素
HTML DOM 的 JavaScript 表示形式。React 提供了一個 API,React.createElement 用於建立 React 元素。
JSX
一種用於設計使用者介面的 JavaScript 擴充套件。JSX 是一種基於 XML 的可擴充套件語言,支援 HTML 語法並進行少量修改。JSX 可以編譯成 React 元素並用於建立使用者介面。
React 元件
React 元件是 React 應用的主要構建塊。它使用 React 元素和 JSX 來設計其使用者介面。React 元件基本上是一個 JavaScript 類(擴充套件React.component 類)或純 JavaScript 函式。React 元件具有屬性、狀態管理、生命週期和事件處理程式。React 元件能夠執行簡單和高階邏輯。
讓我們在 React 元件章節中進一步學習元件。
React 應用的架構
React 庫只是一個 UI 庫,它不會強制使用任何特定的模式來編寫複雜的應用。開發者可以自由選擇他們喜歡的設計模式。React 社群提倡某些設計模式。其中一種模式是 Flux 模式。React 庫還提供了許多概念,如高階元件、上下文、渲染 Props、Refs 等,以編寫更好的程式碼。React Hooks 是一種不斷發展中的概念,用於在大專案中進行狀態管理。讓我們嘗試理解 React 應用的高階架構。
React 應用從單個根元件開始。
根元件使用一個或多個元件構建。
每個元件都可以巢狀到任何級別的其他元件中。
組合是 React 庫的核心概念之一。因此,每個元件都是透過組合較小的元件構建的,而不是從另一個元件繼承。
大多陣列件都是使用者介面元件。
React 應用可以包含用於特定目的的第三方元件,例如路由、動畫、狀態管理等。
React 應用的工作流程
在本節中,我們將透過建立和分析一個簡單的 React 應用來了解 React 應用的工作流程。
開啟命令提示符並轉到您的工作區。
cd /go/to/your/workspace
接下來,建立一個名為static_site 的資料夾,並將目錄更改為新建立的資料夾。
mkdir static_site cd static_site
示例
接下來,建立一個名為hello.html 的檔案,並編寫一個簡單的 React 應用。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>React Application</title>
</head>
<body>
<div id="react-app"></div>
<script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin></script>
<script language="JavaScript">
element = React.createElement('h1', {}, 'Hello React!')
ReactDOM.render(element, document.getElementById('react-app'));
</script>
</body>
</html>
接下來,使用 serve Web 伺服器提供服務。
serve ./hello.html
輸出
接下來,開啟您喜歡的瀏覽器。在位址列中輸入https://:5000,然後按 Enter 鍵。
讓我們分析程式碼並進行少量修改,以更好地理解 React 應用。
在這裡,我們使用了 React 庫提供的兩個 API。
React.createElement
用於建立 React 元素。它期望三個引數:
- 元素標籤
- 元素屬性(作為物件)
- 元素內容 - 它也可以包含巢狀的 React 元素
ReactDOM.render
用於將元素渲染到容器中。它期望兩個引數:
- React 元素或 JSX
- 網頁的根元素
巢狀的 React 元素
由於React.createElement 允許巢狀 React 元素,因此讓我們新增巢狀元素,如下所示:
示例
<script language="JavaScript">
element = React.createElement('div', {}, React.createElement('h1', {}, 'Hello React!'));
ReactDOM.render(element, document.getElementById('react-app'));
</script>
輸出
它將生成以下內容:
<div><h1> Hello React!</h1></div>
使用 JSX
接下來,讓我們完全刪除 React 元素並引入 JSX 語法,如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>React Application</title>
</head>
<body>
<div id="react-app"></div>
<script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
ReactDOM.render(
<div><h1>Hello React!</h1></div>,
document.getElementById('react-app')
);
</script>
</body>
</html>
在這裡,我們包含了 babel 將 JSX 轉換為 JavaScript,並在 script 標籤中添加了type="text/babel"。
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script> <script type="text/babel"> ... ... </script>
接下來,執行應用並開啟瀏覽器。應用的輸出如下所示:
接下來,讓我們建立一個新的 React 元件 Greeting,然後嘗試在網頁中使用它。
<script type="text/babel">
function Greeting() {
return <div><h1>Hello JSX!</h1></div>
}
ReactDOM.render(<Greeting />, document.getElementById('react-app') );
</script>
結果相同,如下所示:
透過分析應用,我們可以視覺化 React 應用的工作流程,如下面的圖所示。
React 應用透過傳遞使用 React 元件建立的使用者介面(以 JSX 或 React 元素格式編寫)和容器來呼叫ReactDOM.render 方法,以渲染使用者介面。
ReactDOM.render 處理 JSX 或 React 元素併發出虛擬 DOM。
虛擬 DOM 將被合併並渲染到容器中。
React 應用的架構
React 庫只是一個 UI 庫,它不會強制使用任何特定的模式來編寫複雜的應用。開發者可以自由選擇他們喜歡的設計模式。React 社群提倡某些設計模式。其中一種模式是 Flux 模式。React 庫還提供了許多概念,如高階元件、上下文、渲染 Props、Refs 等,以編寫更好的程式碼。React Hooks 是一種不斷發展中的概念,用於在大專案中進行狀態管理。讓我們嘗試理解 React 應用的高階架構。